summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-10-20 11:58:00 -0400
committerBen Gamari <ben@smart-cactus.org>2022-11-16 21:37:06 -0500
commitfd91365dece868fc77592764cf3383b8e72ec7d8 (patch)
tree258d6548a4e61dac2b85028d9c7f6c4246e2ed9f
parent2312f856cc9537f473096cf404f807f6a1fb23c8 (diff)
downloadhaskell-fd91365dece868fc77592764cf3383b8e72ec7d8.tar.gz
Annotate the stable pointer lock
-rw-r--r--rts/StablePtr.c4
-rw-r--r--rts/ward.config3
2 files changed, 7 insertions, 0 deletions
diff --git a/rts/StablePtr.c b/rts/StablePtr.c
index c2e7cda2c3..e4d2c8ed12 100644
--- a/rts/StablePtr.c
+++ b/rts/StablePtr.c
@@ -131,6 +131,7 @@ static void enlargeStablePtrTable(void);
* calls to freeStablePtr().
* -------------------------------------------------------------------------- */
+WARD_GRANT(stable_ptr_lock_held)
void
stablePtrLock(void)
{
@@ -138,6 +139,8 @@ stablePtrLock(void)
ACQUIRE_LOCK(&stable_ptr_mutex);
}
+WARD_REVOKE(stable_ptr_lock_held)
+WARD_NEED(stable_ptr_lock_held)
void
stablePtrUnlock(void)
{
@@ -178,6 +181,7 @@ initStablePtrTable(void)
* -------------------------------------------------------------------------- */
// Must be holding stable_ptr_mutex
+WARD_NEED(stable_ptr_lock_held)
static void
enlargeStablePtrTable(void)
{
diff --git a/rts/ward.config b/rts/ward.config
index 0ca5b41f08..91aead362d 100644
--- a/rts/ward.config
+++ b/rts/ward.config
@@ -12,6 +12,8 @@ sharing_sm_lock "the storage manager lock is held by the GC and mediated via gc_
gc_block_alloc_spin_held "gc_block_alloc_spin is held"
-> sharing_sm_lock;
+stable_ptr_lock_held "the stable pointer lock is held";
+
.enforce "Storage.c";
.enforce "GC.c";
.enforce "MarkWeak.c";
@@ -22,3 +24,4 @@ gc_block_alloc_spin_held "gc_block_alloc_spin is held"
.enforce "BlockAlloc.c";
.enforce "Schedule.c";
.enforce "RaiseAsync.c";
+.enforce "StablePtr.c";