code: func (p *simpleResourcePool) queueIdleHandles(handle interface{}) {
  	var toClose []*idleHandle
  	defer func() {
  		// NOTE: Must keep the closure around to late bind the toClose slice.
  		p.closeHandles(toClose)
  	}()
  
  	now := p.options.getCurrentTime()
  	var keepUntil *time.Time
  	if p.options.MaxIdleTime != nil {
  		// NOTE: Assign to temp variable first to work around compiler bug
  		x := now.Add(*p.options.MaxIdleTime)
  		keepUntil = &x
  	}
  
  	p.mutex.Lock()
  	defer p.mutex.Unlock()
  
  	if p.isLameDuck {
  		toClose = []*idleHandle{
  			{handle: handle},
  		}
  		return
  	}
  
  	p.idleHandles = append(
  		p.idleHandles,
  		&idleHandle{
  			handle:    handle,
  			keepUntil: keepUntil,
  		})
  
  	nIdleHandles := uint32(len(p.idleHandles))
  	if nIdleHandles > p.options.MaxIdleHandles {
  		handlesToClose := nIdleHandles - p.options.MaxIdleHandles
  		toClose = p.idleHandles[0:handlesToClose]
  		p.idleHandles = p.idleHandles[handlesToClose:nIdleHandles]
  	}
  }
docs: // This adds an idle resource to the pool.