diff options
-rw-r--r-- | rts/sm/Evac.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c index fe788cdb6f..fb9f4c49b2 100644 --- a/rts/sm/Evac.c +++ b/rts/sm/Evac.c @@ -401,7 +401,8 @@ loop: switch (info->type) { case THUNK_STATIC: - if (info->srt_bitmap != 0) { + if (info->srt_bitmap != 0 && + *THUNK_STATIC_LINK((StgClosure *)q) == NULL) { ACQUIRE_SPIN_LOCK(&static_objects_sync); if (*THUNK_STATIC_LINK((StgClosure *)q) == NULL) { *THUNK_STATIC_LINK((StgClosure *)q) = static_objects; @@ -412,7 +413,8 @@ loop: return q; case FUN_STATIC: - if (info->srt_bitmap != 0) { + if (info->srt_bitmap != 0 && + *FUN_STATIC_LINK((StgClosure *)q) == NULL) { ACQUIRE_SPIN_LOCK(&static_objects_sync); if (*FUN_STATIC_LINK((StgClosure *)q) == NULL) { *FUN_STATIC_LINK((StgClosure *)q) = static_objects; |