summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rts/sm/Evac.c6
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;