code: @Override
    public void free(long idleStartTime)
    {
      if (_is == null) {
        IllegalStateException exn = new IllegalStateException(L.l("{0} unexpected free of closed stream", this));
        exn.fillInStackTrace();
  
        log.log(Level.FINE, exn.toString(), exn);
        return;
      }
  
      long requestStartTime = _requestStartTime;
      _requestStartTime = 0;
  
      if (requestStartTime > 0)
        _requestTimeProbe.end(requestStartTime);
  
  
      // #2369 - the load balancer might set its own view of the free
      // time
      if (idleStartTime <= 0) {
        idleStartTime = _is.getReadTime();
  
        if (idleStartTime <= 0) {
          // for write-only, the read time is zero
          idleStartTime = CurrentTime.currentTime();
        }
      }
      
      _idleStartTime = idleStartTime;
  
      _idleProbe.start();
      _isIdle = true;
  
      _pool.free(this);
    }
docs: Adds the stream to the free pool.
  
  The idleStartTime may be earlier than the current time
  to deal with TCP buffer delays. Typically it will be
  recorded as the start time of the request's write.
  
  @param idleStartTime the time to be used as the start
  of the idle period.