summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2023-04-24 10:34:07 -0400
committerBen Gamari <ben@smart-cactus.org>2023-04-24 10:34:07 -0400
commit8094c7853daca95175c650657b8fc862e037248e (patch)
tree46206d54dbd307d832387c01246c5a7d19f833d7
parent166b70625445e899b8825df00ab1ea15df8ef4ec (diff)
downloadhaskell-8094c7853daca95175c650657b8fc862e037248e.tar.gz
rts: TSO owner
-rw-r--r--rts/Schedule.c2
-rw-r--r--rts/Threads.c7
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