docs: public void exchangeDone() {
          log.debugf("exchange complete in connection to %s", getPeerAddress());
  
          connection.getSinkChannel().setConduit(originalSinkConduit);
          connection.getSourceChannel().setConduit(pushBackStreamSourceConduit);
          connection.getSinkChannel().suspendWrites();
          connection.getSinkChannel().setWriteListener(null);
  
          if (anyAreSet(state, CLOSE_REQ)) {
              currentRequest = null;
              pendingResponse = null;
              this.state |= CLOSED;
              safeClose(connection);
          } else if (anyAreSet(state, UPGRADE_REQUESTED)) {
              connection.getSourceChannel().suspendReads();
              currentRequest = null;
              pendingResponse = null;
              return;
          }
          currentRequest = null;
          pendingResponse = null;
  
          HttpClientExchange next = pendingQueue.poll();
          if (next == null) {
              //we resume reads, so if the target goes away we get notified
              connection.getSourceChannel().setReadListener(clientReadListener);
              connection.getSourceChannel().resumeReads();
          } else {
              initiateRequest(next);
          }
      }