File 0686-erts-Fix-no-locking-in-erts_schedulers_state-during-.patch of Package erlang

From 2a141570b98b1aacf21c649e92abe2ea5efb98d6 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Tue, 18 Jun 2024 14:29:46 +0200
Subject: [PATCH 1/2] erts: Fix no locking in erts_schedulers_state() during
 crash dump

---
 erts/emulator/beam/erl_process.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index c2ca5a03f3..4c7546fbc5 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -8007,7 +8007,10 @@ erts_schedulers_state(Uint *total,
 {
     if (active || online || dirty_cpu_online
 	|| dirty_cpu_active || dirty_io_active) {
-	erts_mtx_lock(&schdlr_sspnd.mtx);
+        const int lock = !ERTS_IS_CRASH_DUMPING;
+        if (lock) {
+            erts_mtx_lock(&schdlr_sspnd.mtx);
+        }
 	if (active)
 	    *active = schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
 					       ERTS_SCHED_NORMAL);
@@ -8023,7 +8026,9 @@ erts_schedulers_state(Uint *total,
 	if (dirty_io_active)
 	    *dirty_io_active = schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
 							ERTS_SCHED_DIRTY_IO);
-	erts_mtx_unlock(&schdlr_sspnd.mtx);
+        if (lock) {
+            erts_mtx_unlock(&schdlr_sspnd.mtx);
+        }
     }
 
     if (total)
-- 
2.35.3

openSUSE Build Service is sponsored by