diff options
author | Ben Gamari <ben@smart-cactus.org> | 2023-04-24 10:34:07 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2023-04-24 10:34:07 -0400 |
commit | 8094c7853daca95175c650657b8fc862e037248e (patch) | |
tree | 46206d54dbd307d832387c01246c5a7d19f833d7 | |
parent | 166b70625445e899b8825df00ab1ea15df8ef4ec (diff) | |
download | haskell-8094c7853daca95175c650657b8fc862e037248e.tar.gz |
rts: TSO owner
-rw-r--r-- | rts/Schedule.c | 2 | ||||
-rw-r--r-- | rts/Threads.c | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/rts/Schedule.c b/rts/Schedule.c index d8c71203e8..6ca37bce43 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -836,7 +836,7 @@ schedulePushWork(Capability *cap USED_IF_THREADS, if (t->bound) { t->bound->task->cap = free_caps[i]; } - t->cap = free_caps[i]; + RELAXED_STORE(&t->cap, free_caps[i]); n--; // we have one fewer threads now i++; // move on to the next free_cap if (i == n_free_caps) i = 0; diff --git a/rts/Threads.c b/rts/Threads.c index d03e9c4cbc..0350433cf0 100644 --- a/rts/Threads.c +++ b/rts/Threads.c @@ -272,15 +272,16 @@ tryWakeupThread (Capability *cap, StgTSO *tso) traceEventThreadWakeup (cap, tso, tso->cap->no); #if defined(THREADED_RTS) - if (tso->cap != cap) + Capability *tso_owner = RELAXED_LOAD(&tso->cap); + if (tso_owner != cap) { MessageWakeup *msg; msg = (MessageWakeup *)allocate(cap,sizeofW(MessageWakeup)); msg->tso = tso; SET_HDR(msg, &stg_MSG_TRY_WAKEUP_info, CCS_SYSTEM); - sendMessage(cap, tso->cap, (Message*)msg); + sendMessage(cap, tso_owner, (Message*)msg); debugTraceCap(DEBUG_sched, cap, "message: try wakeup thread %" - FMT_StgThreadID " on cap %d", tso->id, tso->cap->no); + FMT_StgThreadID " on cap %d", tso->id, tso_owner->no); return; } #endif |