File 0506-erts-Move-faulty-positioned-asserts.patch of Package erlang
From a617afbd0b325dffae2d5a855d49f42cefe9f52c Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 28 Sep 2022 21:27:41 +0200
Subject: [PATCH] erts: Move faulty positioned asserts
assert_no_active_writers() failed if max_heap exceeded (reds==-2)
while having active writers.
---
erts/emulator/beam/erl_gc.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 679d7f3a21..df75c530a2 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -775,16 +775,6 @@ do_major_collection:
ERTS_MSACC_SET_STATE_CACHED_X(ERTS_MSACC_STATE_GC);
}
- assert_no_active_writers(p);
-
- /*
- * Finish.
- */
-
- ERTS_CHK_OFFHEAP(p);
-
- ErtsGcQuickSanityCheck(p);
-
/* Max heap size has been reached and the process was configured
to be killed, so we kill it and set it in a delayed garbage
collecting state. There should be no gc_end trace or
@@ -806,6 +796,13 @@ do_major_collection:
return res;
}
+ /*
+ * Finish.
+ */
+ assert_no_active_writers(p);
+ ERTS_CHK_OFFHEAP(p);
+ ErtsGcQuickSanityCheck(p);
+
erts_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC);
if (IS_TRACED_FL(p, F_TRACE_GC)) {
--
2.35.3