add assertLocked to std.debug.SafetyLock

This commit is contained in:
Scott Redig 2024-10-07 01:16:20 -07:00 committed by Andrew Kelley
parent 73dcd19140
commit b2c62bcbf6
2 changed files with 17 additions and 3 deletions

View File

@ -1531,9 +1531,9 @@ pub fn ConfigurableTrace(comptime size: usize, comptime stack_frame_count: usize
}
pub const SafetyLock = struct {
state: State = .unlocked,
state: State = if (runtime_safety) .unlocked else .unknown,
pub const State = if (runtime_safety) enum { unlocked, locked } else enum { unlocked };
pub const State = if (runtime_safety) enum { unlocked, locked } else enum { unknown };
pub fn lock(l: *SafetyLock) void {
if (!runtime_safety) return;
@ -1551,8 +1551,22 @@ pub const SafetyLock = struct {
if (!runtime_safety) return;
assert(l.state == .unlocked);
}
pub fn assertLocked(l: SafetyLock) void {
if (!runtime_safety) return;
assert(l.state == .locked);
}
};
test SafetyLock {
var safety_lock: SafetyLock = .{};
safety_lock.assertUnlocked();
safety_lock.lock();
safety_lock.assertLocked();
safety_lock.unlock();
safety_lock.assertUnlocked();
}
/// Detect whether the program is being executed in the Valgrind virtual machine.
///
/// When Valgrind integrations are disabled, this returns comptime-known false.

View File

@ -1692,7 +1692,7 @@ pub fn HashMapUnmanaged(
}
self.size = 0;
self.pointer_stability = .{ .state = .unlocked };
self.pointer_stability = .{};
std.mem.swap(Self, self, &map);
map.deinit(allocator);
}