diff options
Diffstat (limited to 'rts/StaticPtrTable.c')
-rw-r--r-- | rts/StaticPtrTable.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/rts/StaticPtrTable.c b/rts/StaticPtrTable.c index 57ade5bafb..b793b9c56c 100644 --- a/rts/StaticPtrTable.c +++ b/rts/StaticPtrTable.c @@ -31,7 +31,7 @@ static int compareFingerprint(StgWord64 ptra[2], StgWord64 ptrb[2]) { return ptra[0] == ptrb[0] && ptra[1] == ptrb[1]; } -void hs_spt_insert(StgWord64 key[2],void *spe_closure) { +void hs_spt_insert_stableptr(StgWord64 key[2], StgStablePtr *entry) { // hs_spt_insert is called from constructor functions, so // the SPT needs to be initialized here. if (spt == NULL) { @@ -43,6 +43,12 @@ void hs_spt_insert(StgWord64 key[2],void *spe_closure) { #endif } + ACQUIRE_LOCK(&spt_lock); + insertHashTable(spt, (StgWord)key, entry); + RELEASE_LOCK(&spt_lock); +} + +void hs_spt_insert(StgWord64 key[2], void *spe_closure) { // Cannot remove this indirection yet because getStablePtr() // might return NULL, in which case hs_spt_lookup() returns NULL // instead of the actual closure pointer. @@ -50,9 +56,7 @@ void hs_spt_insert(StgWord64 key[2],void *spe_closure) { , "hs_spt_insert: entry" ); *entry = getStablePtr(spe_closure); - ACQUIRE_LOCK(&spt_lock); - insertHashTable(spt, (StgWord)key, entry); - RELEASE_LOCK(&spt_lock); + hs_spt_insert_stableptr(key, entry); } static void freeSptEntry(void* entry) { |