docs: private void timeoutConnections(final long currentTime, final HostThreadData data) {
          int idleConnections = data.availableConnections.size();
          for (;;) {
              ConnectionHolder holder;
              if (idleConnections > 0 && idleConnections > coreCachedConnections && (holder = data.availableConnections.peek()) != null) {
                  if (!holder.clientConnection.isOpen()) {
                      // Already closed connections decrease the available connections
                      idleConnections--;
                  } else if (currentTime >= holder.timeout) {
                      // If the timeout is reached already, just close
                      holder = data.availableConnections.poll();
                      IoUtils.safeClose(holder.clientConnection);
                      idleConnections--;
                  } else {
                      if (data.timeoutKey != null) {
                          data.timeoutKey.remove();
                          data.timeoutKey = null;
                      }
                      // Schedule a timeout task
                      final long remaining = holder.timeout - currentTime + 1;
                      data.nextTimeout = holder.timeout;
                      data.timeoutKey = WorkerUtils.executeAfter(holder.clientConnection.getIoThread(), data.timeoutTask, remaining, TimeUnit.MILLISECONDS);
                      return;
                  }
              } else {
                  // If we are below the soft limit, just cancel the task
                  if (data.timeoutKey != null) {
                      data.timeoutKey.remove();
                      data.timeoutKey = null;
                  }
                  data.nextTimeout = -1;
                  return;
              }
          }
      }