docs: void lazyCopy(JSMessageData original) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              JmfTr.entry(this, tc, "lazyCopy", new Object[] { original });
  
          synchronized (getMessageLockArtefact()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  JmfTr.debug(this, tc, "lazyCopy locked dest ", new Object[] { getMessageLockArtefact() });
  
              // This is the only occasion that we reach out and lock another message instance
              // but we work on the assumption that lazy copying is happening as part of
              // instantiation of a new message instance, so the potential for deadlocking
              // is nil, since no other thread knows about this instance and can not therefore
              // be concurrently supplying 'this' as the 'original' argument in another thread.
              synchronized (original.getMessageLockArtefact()) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      JmfTr.debug(this, tc, "lazyCopy locked source ", new Object[] { original.getMessageLockArtefact() });
  
                  // Copy common fields
                  indirect = original.indirect;
  
                  // If the message is assembled (i.e. we have a contents buffer) we share both the
                  // buffer and the cache between original and copy.
                  // If the message is unassembled (no contents buffer) we just share the cache.
                  // In either case if a change later needs to be made to the shared portion we
                  // will need to copy it before changing, so the shared flags is set to
                  // indicate sharing exists between unrelated parts.
                  if (original.contents == null) {
                      contents = null;
                      original.sharedCache = true;
                      sharedCache = true;
                      cache = original.cache;
                  }
                  else {
                      original.sharedContents = true;
                      sharedContents = true;
                      contents = original.contents;
                      original.sharedCache = true;
                      sharedCache = true;
                      cache = original.cache;
                  }
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      JmfTr.debug(this, tc, "lazyCopy unlocking source ", new Object[] { original.getMessageLockArtefact() });
              }
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  JmfTr.debug(this, tc, "lazyCopy unlocking dest ", new Object[] { getMessageLockArtefact() });
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              JmfTr.exit(this, tc, "lazyCopy");
      }