func (s *Session) Clone() *Session {
	s.m.Lock()
	scopy := copySession(s, true)
	s.m.Unlock()
	return scopy
}
func (s *Session) Clone() *Session {
	s.m.Lock()
	scopy := copySession(s, true)
	s.m.Unlock()
	return scopy
}
func ( s * Session ) Clone ( ) * Session { s . m . Lock ( ) scopy := copySession ( s , true ) s . m . Unlock ( ) return scopy }
// Clone works just like Copy, but also reuses the same socket as the original
// session, in case it had already reserved one due to its consistency
// guarantees.  This behavior ensures that writes performed in the old session
// are necessarily observed when using the new session, as long as it was a
// strong or monotonic session.  That said, it also means that long operations
// may cause other goroutines using the original session to wait.
Clone works just like Copy but also reuses the same socket as the original session in case it had already reserved one due to its consistency guarantees . This behavior ensures that writes performed in the old session are necessarily observed when using the new session as long as it was a strong or monotonic session . That said it also means that long operations may cause other goroutines using the original session to wait .