summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2022-09-22 22:39:19 +0200
committerRickard Green <rickard@erlang.org>2022-09-22 22:49:19 +0200
commitb2d7a443501784ef85c44c18dad9b30935ae03c3 (patch)
tree0156a1d9b7ab1d4714924e7627deeef6eb158a85
parent6d5a5f31c36bbdaad21585d25974177bd1b75e66 (diff)
downloaderlang-b2d7a443501784ef85c44c18dad9b30935ae03c3.tar.gz
[erts] Fix dist data notification for distribution process
-rw-r--r--erts/emulator/beam/dist.c10
1 files 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)
(!ctx->no_trap && !ctx->no_suspend));
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,