func (sh *sessionHandle) recycle() {
	sh.mu.Lock()
	defer sh.mu.Unlock()
	if sh.session == nil {
		return
	}
	sh.session.recycle()
	sh.session = nil
}
recycle gives the inner session object back to its home session pool. It is safe to call recycle multiple times but only the first one would take effect.
package spanner
import (
	"container/heap"
	"container/list"
	"fmt"
	"log"
	"math/rand"
	"strings"
	"sync"
	"time"
	"golang.org/x/net/context"
	sppb "google.golang.org/genproto/googleapis/spanner/v1"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/metadata"
)
type sessionHandle struct {
	mu sync.Mutex
	session *session
}