public long doIdleTimeout(long now, long timeoutNanos) {
    if (shouldDestroy()) {
      return 0;
    }
    synchronized (this) {
      if (isActive()) {
        // this is a reasonable value to return since odds are that
        // when the connection goes inactive it will be resetting its access time.
        return timeoutNanos;
      } else {
        long idleRemaining = remainingIdle(now, timeoutNanos);
        if (idleRemaining <= 0) {
          if (setShouldDestroy()) {
            // we were able to set the destroy bit
            return -1;
          } else {
            // someone else already destroyed it
            return 0;
          }
        } else {
          return idleRemaining;
        }
      }
    }
  }
If we were able to idle timeout this connection then return -1. If this connection has already
been destroyed return 0. Otherwise return the amount of idle time remaining. If the connection
is active we can't time it out now and a hint is returned as when we should check again.
geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java