diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-06-04 09:05:53 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-06-04 09:05:53 +0000 |
commit | d9275dd06ee24575ff50a6696fe7fe1e1fa91ac7 (patch) | |
tree | 28b1a6efcbb9dfe6a18b5f6d8b1fa95f905d38a1 /rts/Stable.c | |
parent | 1d6d8bc152fdcabea6d26525f269d8ade8b75dd6 (diff) | |
download | haskell-d9275dd06ee24575ff50a6696fe7fe1e1fa91ac7.tar.gz |
Lock the StablePtr table during GC
Allows hs_free_fun_ptr() to be called by a separate thread
Diffstat (limited to 'rts/Stable.c')
-rw-r--r-- | rts/Stable.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/rts/Stable.c b/rts/Stable.c index 94a756a380..97796b89a7 100644 --- a/rts/Stable.c +++ b/rts/Stable.c @@ -316,6 +316,23 @@ enlargeStablePtrTable(void) } /* ----------------------------------------------------------------------------- + * We must lock the StablePtr table during GC, to prevent simultaneous + * calls to freeStablePtr(). + * -------------------------------------------------------------------------- */ + +void +stablePtrPreGC(void) +{ + ACQUIRE_LOCK(&stable_mutex); +} + +void +stablePtrPostGC(void) +{ + RELEASE_LOCK(&stable_mutex); +} + +/* ----------------------------------------------------------------------------- * Treat stable pointers as roots for the garbage collector. * * A stable pointer is any stable name entry with a ref > 0. We'll |