diff options
author | Ben Gamari <ben@smart-cactus.org> | 2023-01-26 16:10:04 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-01-27 23:56:42 -0500 |
commit | 38ad83512950992d8fbfea78589b3194c32eb4d7 (patch) | |
tree | bcc8213de1afaa6eafa2165d562b59145f7b239a /rts | |
parent | d0ddc01bbe20c6628b84ac5181a89aca2e99ba97 (diff) | |
download | haskell-38ad83512950992d8fbfea78589b3194c32eb4d7.tar.gz |
rts: Relax Messages assertion
`doneWithMsgThrowTo` was previously too strict in asserting that the
`Message` is locked. Specifically, it failed to consider that the
`Message` may not be locked if we are deleting all threads during RTS
shutdown.
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Messages.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/rts/Messages.h b/rts/Messages.h index c95532b7e6..49b8e8b2a8 100644 --- a/rts/Messages.h +++ b/rts/Messages.h @@ -10,6 +10,7 @@ #include "Capability.h" #include "Updates.h" // for DEBUG_FILL_SLOP +#include "Schedule.h" // for SCHED_INTERRUPTING #include "SMPClosureOps.h" #include "BeginPrivate.h" @@ -26,8 +27,9 @@ INLINE_HEADER void doneWithMsgThrowTo (Capability *cap, MessageThrowTo *m) { // The message better be locked (unless we are running single-threaded, - // where we are a bit more lenient (#19075). - ASSERT(getNumCapabilities() == 1 || m->header.info == &stg_WHITEHOLE_info); + // where we are a bit more lenient (#19075) or we got here from + // deleteAllThreads() due to RTS shutdown). + ASSERT(getNumCapabilities() == 1 || m->header.info == &stg_WHITEHOLE_info || getSchedState() == SCHED_INTERRUPTING); IF_NONMOVING_WRITE_BARRIER_ENABLED { updateRemembSetPushMessageThrowTo(cap, m); } |