@Override
 public void releaseConnection(
     final HttpClientConnection managedConn,
     final Object state,
     final long keepalive,
     final TimeUnit tunit) {
   Args.notNull(managedConn, "Managed connection");
   synchronized (managedConn) {
     final CPoolEntry entry = CPoolProxy.detach(managedConn);
     if (entry == null) {
       return;
     }
     final ManagedHttpClientConnection conn = entry.getConnection();
     try {
       if (conn.isOpen()) {
         final TimeUnit effectiveUnit = tunit != null ? tunit : TimeUnit.MILLISECONDS;
         entry.setState(state);
         entry.updateExpiry(keepalive, effectiveUnit);
         if (this.log.isDebugEnabled()) {
           final String s;
           if (keepalive > 0) {
             s = "for " + (double) effectiveUnit.toMillis(keepalive) / 1000 + " seconds";
           } else {
             s = "indefinitely";
           }
           this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
         }
       }
     } finally {
       this.pool.release(entry, conn.isOpen() && entry.isRouteComplete());
       if (this.log.isDebugEnabled()) {
         this.log.debug("Connection released: " + format(entry) + formatStats(entry.getRoute()));
       }
     }
   }
 }