// Copyright 2015 The Vanadium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package sync | |
import "sync" | |
// DebugMutex supports checking whether a mutex is locked. | |
type DebugMutex struct { | |
mutex sync.Mutex | |
isLocked bool | |
} | |
func (m *DebugMutex) Lock() { | |
m.mutex.Lock() | |
m.isLocked = true | |
} | |
func (m *DebugMutex) Unlock() { | |
m.CheckLocked() | |
m.isLocked = false | |
m.mutex.Unlock() | |
} | |
// CheckLocked panics if the lock is not held. | |
func (m *DebugMutex) CheckLocked() { | |
if !m.isLocked { | |
panic("Mutex is not locked") | |
} | |
} |