File 1684-erts-Fix-dist-data-notification-for-distribution-pro.patch of Package erlang

From b2d7a443501784ef85c44c18dad9b30935ae03c3 Mon Sep 17 00:00:00 2001
From: Rickard Green <rickard@erlang.org>
Date: Thu, 22 Sep 2022 22:39:19 +0200
Subject: [PATCH] [erts] Fix dist data notification for distribution process

---
 erts/emulator/beam/dist.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index f1cd97c3bf..c41f087bc7 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -2511,7 +2511,7 @@ erts_dsig_send(ErtsDSigSendContext *ctx)
                 Sint obsz = size_obuf(ctx->obuf);
 
 		erts_mtx_lock(&dep->qlock);
-		qsize = erts_atomic_add_read_nob(&dep->qsize, (erts_aint_t) obsz);
+		qsize = erts_atomic_add_read_mb(&dep->qsize, (erts_aint_t) obsz);
                 ASSERT(qsize >= obsz);
                 qflgs = erts_atomic32_read_nob(&dep->qflgs);
 		if (!(qflgs & ERTS_DE_QFLG_BUSY) && qsize >= erts_dist_buf_busy_limit) {
@@ -3116,17 +3116,18 @@ dist_ctrl_get_data_notification_1(BIF_ALIST_1)
 
     ASSERT(dep->cid == BIF_P->common.id);
 
-    qflgs = erts_atomic32_read_acqb(&dep->qflgs);
+    qflgs = erts_atomic32_read_nob(&dep->qflgs);
 
     if (!(qflgs & ERTS_DE_QFLG_REQ_INFO)) {
-        qsize = erts_atomic_read_acqb(&dep->qsize);
+        ERTS_THR_READ_MEMORY_BARRIER;
+        qsize = erts_atomic_read_nob(&dep->qsize);
         ASSERT(qsize >= 0);
         if (qsize > 0)
             receiver = BIF_P->common.id; /* Notify ourselves... */
         else { /* Empty queue; set req-info flag... */
             qflgs = erts_atomic32_read_bor_mb(&dep->qflgs,
                                                   ERTS_DE_QFLG_REQ_INFO);
-            qsize = erts_atomic_read_acqb(&dep->qsize);
+            qsize = erts_atomic_read_nob(&dep->qsize);
             ASSERT(qsize >= 0);
             if (qsize > 0) {
                 qflgs = erts_atomic32_read_band_mb(&dep->qflgs,
@@ -4142,6 +4143,7 @@ setup_connection_epiloge_rwunlock(Process *c_p, DistEntry *dep,
             erts_schedule_dist_command(NULL, dep);
         }
         else {
+            ERTS_THR_READ_MEMORY_BARRIER;
             qflgs = erts_atomic32_read_nob(&dep->qflgs);
             if (qflgs & ERTS_DE_QFLG_REQ_INFO) {
                 qflgs = erts_atomic32_read_band_mb(&dep->qflgs,
-- 
2.35.3

openSUSE Build Service is sponsored by