in middleware/dblock/lock.go [48:70]
func (l Lock) refresher(duration time.Duration, cancelFunc context.CancelFunc) {
for {
select {
case <-time.After(duration):
deadline := time.Now().Add(duration)
contextDeadline, deadlineCancelFunc := context.WithDeadline(context.Background(), deadline)
// try refresh, else cancel
err := l.conn.PingContext(contextDeadline)
if err != nil {
cancelFunc()
deadlineCancelFunc()
// this will make sure connection is closed
l.Release()
return
}
deadlineCancelFunc() // to avoid context leak
case <-l.unlocker:
cancelFunc()
return
}
}
}