docs: public void close() {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "close, vc=" + getVCHash());
          }
  
          synchronized (closeSync) {
              if (closeCalled) {
                  return;
              }
  
              closeCalled = true;
              if (null != this.netBuffer) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                      Tr.event(tc, "Releasing netBuffer during close "
                                   + SSLUtils.getBufferTraceInfo(netBuffer));
                  }
                  this.netBuffer.release();
                  this.netBuffer = null;
              }
  
              cleanupDecBuffers();
              if (unconsumedDecData != null) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                      Tr.event(tc, "Releasing unconsumed decrypted buffers, "
                                   + SSLUtils.getBufferTraceInfo(unconsumedDecData));
                  }
                  WsByteBufferUtils.releaseBufferArray(unconsumedDecData);
                  unconsumedDecData = null;
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "close");
          }
      }