code: func (sg *sessionPool) put(ctx sessionctx.Context) {
  	if sg.resPool == nil {
  		return
  	}
  
  	// no need to protect sg.resPool, even the sg.resPool is closed, the ctx still need to
  	// put into resPool, because when resPool is closing, it will wait all the ctx returns, then resPool finish closing.
  	sg.resPool.Put(ctx.(pools.Resource))
  }
docs: // put returns sessionctx to context resource pool.