code: func (cc *CachingConnector) ReleaseConn(conn *grpc.ClientConn) {
  	cc.lock.Lock()
  	defer cc.lock.Unlock()
  
  	// Safety check to see if the connector has been closed. This represents a
  	// bug in the calling code, but it's not good to panic here.
  	if cc.janitorDone == nil {
  		logger.Warn("Trying to release connection after connector closed")
  
  		if conn.GetState() != connectivity.Shutdown {
  			logger.Warn("Connection is not shutdown, trying to close ...")
  			if err := conn.Close(); err != nil {
  				logger.Warnf("conn close failed err %s", err)
  			}
  		}
  		return
  	}
  
  	cconn, ok := cc.index[conn]
  	if !ok {
  		logger.Warnf("connection not found [%p]", conn)
  		return
  	}
  	logger.Debugf("ReleaseConn [%s]", cconn.target)
  
  	setClosed(cconn)
  
  	cc.ensureJanitorStarted()
  }
docs: // ReleaseConn notifies the cache that the connection is no longer in use.