aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug.zig
diff options
context:
space:
mode:
authorScott Redig <git@scottredig.com>2024-10-07 01:16:20 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-11-22 18:39:17 -0500
commitb2c62bcbf64a3ffa2af6a8e441f1c12e10c598ec (patch)
treeccf845de8f00f44d3dbdda603978967a7283f911 /lib/std/debug.zig
parent73dcd1914071984c5a2e7c195212404824dbfb9e (diff)
downloadzig-b2c62bcbf64a3ffa2af6a8e441f1c12e10c598ec.tar.gz
zig-b2c62bcbf64a3ffa2af6a8e441f1c12e10c598ec.zip
add assertLocked to std.debug.SafetyLock
Diffstat (limited to 'lib/std/debug.zig')
-rw-r--r--lib/std/debug.zig18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/std/debug.zig b/lib/std/debug.zig
index 982e71bc35..0756e456ff 100644
--- a/lib/std/debug.zig
+++ b/lib/std/debug.zig
@@ -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.