summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2023-01-26 16:10:04 -0500
committerMarge Bot <ben+marge-bot@smart-cactus.org>2023-01-27 23:56:42 -0500
commit38ad83512950992d8fbfea78589b3194c32eb4d7 (patch)
treebcc8213de1afaa6eafa2165d562b59145f7b239a
parentd0ddc01bbe20c6628b84ac5181a89aca2e99ba97 (diff)
downloadhaskell-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.
-rw-r--r--rts/Messages.h6
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);
}