synchronized void addConnection(PooledConnection connection) {
      if (closing) {
        throw new CacheClosedException("This pool is closing");
      }

      getPoolStats().incPoolConnections(1);

      // we want the smallest birthDate (e.g. oldest cnx) at the front of the list
      allConnections.add(connection);

      addToEndpointMap(connection);

      if (isIdleExpirePossible()) {
        startBackgroundExpiration();
      }
      if (lifetimeTimeout != -1 && !haveLifetimeExpireConnectionsTask) {
        if (checkForReschedule(true)) {
          // something has already expired so start processing with no delay
          startBackgroundLifetimeExpiration(0);
        }
      }
    }
An existing connections lifetime has expired. We only want to create one replacement connection
at a time so this should block until this connection replaces an existing one. Note that if
a connection is created here it must not count against the pool max and its idle time and
lifetime must not begin until it actually replaces the existing one.

@param currentServer the server the candidate connection is connected to
@return true if caller should recheck for expired lifetimes; false if a background check was
        scheduled or no expirations are possible.
geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java