summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2020-12-15 10:23:01 +0000
committermpi <mpi@openbsd.org>2020-12-15 10:23:01 +0000
commit45300472ceee5803da9aec8506af42fa6fef9be4 (patch)
tree8bacd8ea5075e51ef9c1075ec9fb63903a8dffaf
parentFix return value variable type in tls_keypair_load_cert (diff)
downloadwireguard-openbsd-45300472ceee5803da9aec8506af42fa6fef9be4.tar.xz
wireguard-openbsd-45300472ceee5803da9aec8506af42fa6fef9be4.zip
Add helpers around rw_status(9) to help checking if a lock is held.
ok visa@
-rw-r--r--sys/sys/rwlock.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/sys/rwlock.h b/sys/sys/rwlock.h
index 4b32e387ff4..9e6a7a26895 100644
--- a/sys/sys/rwlock.h
+++ b/sys/sys/rwlock.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: rwlock.h,v 1.26 2019/07/16 01:40:49 jsg Exp $ */
+/* $OpenBSD: rwlock.h,v 1.27 2020/12/15 10:23:01 mpi Exp $ */
/*
* Copyright (c) 2002 Artur Grabowski <art@openbsd.org>
*
@@ -168,6 +168,29 @@ int rw_enter(struct rwlock *, int);
void rw_exit(struct rwlock *);
int rw_status(struct rwlock *);
+static inline int
+rw_read_held(struct rwlock *rwl)
+{
+ return (rw_status(rwl) == RW_READ);
+}
+
+static inline int
+rw_write_held(struct rwlock *rwl)
+{
+ return (rw_status(rwl) == RW_WRITE);
+}
+
+static inline int
+rw_lock_held(struct rwlock *rwl)
+{
+ int status;
+
+ status = rw_status(rwl);
+
+ return (status == RW_READ || status == RW_WRITE);
+}
+
+
void _rrw_init_flags(struct rrwlock *, const char *, int,
const struct lock_type *);
int rrw_enter(struct rrwlock *, int);