File 0689-erts-Fix-cpool_delete.patch of Package erlang

From e176896d9c8bd149ea83e21e03116e4f5453a9bc Mon Sep 17 00:00:00 2001
From: Rickard Green <rickard@erlang.org>
Date: Fri, 28 Jun 2024 23:06:53 +0200
Subject: [PATCH] [erts] Fix cpool_delete()

When setting modification marker on the 'prev' field of a carrier to
delete from a pool, we back off and wait for the content of the
field to receive expected value if it did not have that from the
beginning. Due to a copy-paste bug; when this happened, we waited on
a completely different memory location which caused the scheduler
thread doing this to get stuck forever. This is obviously a very
rare scenario, since this bug has been present for 11 years without
being reported.
---
 erts/emulator/beam/erl_alloc_util.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 5ae78c7153..a59a4665b4 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -3479,7 +3479,7 @@ cpool_delete(Allctr_t *allctr, Allctr_t *prev_allctr, Carrier_t *crr)
 	b = 1;
 	do {
 	    b = backoff(b);
-	    tmp = cpool_read(&cpd2p->prev);
+	    tmp = cpool_read(&crr->cpool.prev);
 	} while (tmp != val);
     }
 
-- 
2.35.3

openSUSE Build Service is sponsored by