in linux/handler.go [91:115]
func (h *KeyHandler) lockKey(keyID string) *sync.Mutex {
var ret *sync.Mutex
for stop := false; !stop; {
h.lock.Lock()
lock := h.inFlightLocks[keyID]
if lock == nil {
lock = new(sync.Mutex)
h.inFlightLocks[keyID] = lock
}
h.lock.Unlock()
ret = lock
ret.Lock()
h.lock.Lock()
lock = h.inFlightLocks[keyID]
if ret == lock {
stop = true
} else {
ret.Unlock()
}
h.lock.Unlock()
}
return ret
}