@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);
  if (idleStartTime <= 0) {
    idleStartTime=_is.getReadTime();
    if (idleStartTime <= 0) {
      idleStartTime=CurrentTime.currentTime();
    }
  }
  _idleStartTime=idleStartTime;
  _idleProbe.start();
  _isIdle=true;
  _pool.free(this);
}

@ 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 ) ; if ( idleStartTime <= 0 ) { idleStartTime = _is . getReadTime ( ) ; if ( idleStartTime <= 0 ) { idleStartTime = CurrentTime . currentTime ( ) ; } } _idleStartTime = idleStartTime ; _idleProbe . start ( ) ; _isIdle = true ; _pool . free ( this ) ; }
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 .
