code: func (f *freeClientPool) disconnect(address string) {
  	f.lock.Lock()
  	defer f.lock.Unlock()
  
  	if f.closed {
  		return
  	}
  	e := f.addressMap[address]
  	now := f.clock.Now()
  	if !e.connected {
  		log.Debug("Client already disconnected", "address", address)
  		return
  	}
  
  	f.connPool.Remove(e.index)
  	f.calcLogUsage(e, now)
  	e.connected = false
  	f.disconnPool.Push(e, -e.logUsage)
  	log.Debug("Client disconnected", "address", address)
  }
docs: // disconnect should be called when a connection is terminated. If the disconnection
  // was initiated by the pool itself using disconnectFn then calling disconnect is
  // not necessary but permitted.