diff options
author | Rickard Green <rickard@erlang.org> | 2022-09-22 22:39:19 +0200 |
---|---|---|
committer | Rickard Green <rickard@erlang.org> | 2022-09-22 22:49:19 +0200 |
commit | b2d7a443501784ef85c44c18dad9b30935ae03c3 (patch) | |
tree | 0156a1d9b7ab1d4714924e7627deeef6eb158a85 | |
parent | 6d5a5f31c36bbdaad21585d25974177bd1b75e66 (diff) | |
download | erlang-b2d7a443501784ef85c44c18dad9b30935ae03c3.tar.gz |
[erts] Fix dist data notification for distribution process
-rw-r--r-- | erts/emulator/beam/dist.c | 10 |
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, |