From 0cf0d6c26a1e3dd6f23e21ad0d80dc8c47d9c1c3 Mon Sep 17 00:00:00 2001 From: amir Date: Sat, 7 Mar 2026 10:29:48 +0100 Subject: [PATCH] Bug fixes in the lock free mpmc queue Fix bug slots used before initialization,compare and swap is protecting updating committed, but it is not protecting the memory initialization. Adding atomic_flag commit_lock to protect against that Fix bug multiple threads committing at the same time, fixed by using atomic_flag commit_lock and re-checking committed after acquiring the lock --- binaries/changlog.txt | 3 ++ binaries/file_hasher_v3.3.exe | Bin 0 -> 165376 bytes platform.h | 1 + platform_windows.c | 50 ++++++++++++++++++++++++---------- 4 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 binaries/file_hasher_v3.3.exe diff --git a/binaries/changlog.txt b/binaries/changlog.txt index 07bcec1..3dd2d9b 100644 --- a/binaries/changlog.txt +++ b/binaries/changlog.txt @@ -13,3 +13,6 @@ v3.1: Lock free MPMC queue v3.2: Making the lock free MPMC queue growable Add padding to avoir false sharing Add sleep() and SwitchToThread() to limit spinning + +v3.3: Fix bug slots used before initialization,compare and swap is protecting updating committed, but it is not protecting the memory initialization. Adding atomic_flag commit_lock to protect against that +Fix bug multiple threads committing at the same time, fixed by using atomic_flag commit_lock and re-checking committed after acquiring the lock diff --git a/binaries/file_hasher_v3.3.exe b/binaries/file_hasher_v3.3.exe new file mode 100644 index 0000000000000000000000000000000000000000..de83b98910946af715195114e7b4556d79d90646 GIT binary patch literal 165376 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

% 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 NKs|3h{_jWN-vPVTlKTJv literal 0 HcmV?d00001 diff --git a/platform.h b/platform.h index e67fd7b..337ce54 100644 --- a/platform.h +++ b/platform.h @@ -117,6 +117,7 @@ typedef struct { atomic_size_t committed; size_t commit_step; + atomic_flag commit_lock; MPMCSlot *slots; } MPMCQueue; diff --git a/platform_windows.c b/platform_windows.c index b20876d..c3f2d20 100644 --- a/platform_windows.c +++ b/platform_windows.c @@ -96,6 +96,7 @@ void mpmc_init(MPMCQueue *q, size_t max_capacity) { } q->commit_step = (64ull * 1024 * 1024) / sizeof(MPMCSlot); + atomic_flag_clear(&q->commit_lock); q->committed = q->commit_step; @@ -112,15 +113,28 @@ void mpmc_init(MPMCQueue *q, size_t max_capacity) { } static void mpmc_commit_more(MPMCQueue *q) { - size_t start = q->committed; + + if (atomic_flag_test_and_set(&q->commit_lock)) + return; + + size_t start = atomic_load_explicit(&q->committed, memory_order_acquire); + size_t tail = atomic_load_explicit(&q->tail, memory_order_relaxed); + + // another thread already committed enough + if (tail < start) { + atomic_flag_clear(&q->commit_lock); + return; + } + + if (start >= q->capacity) { + atomic_flag_clear(&q->commit_lock); + return; + } size_t new_commit = start + q->commit_step; if (new_commit > q->capacity) new_commit = q->capacity; - if (!atomic_compare_exchange_strong(&q->committed, &start, new_commit)) - return; // another thread already committed - size_t count = new_commit - start; VirtualAlloc(&q->slots[start], count * sizeof(MPMCSlot), MEM_COMMIT, @@ -130,6 +144,10 @@ static void mpmc_commit_more(MPMCQueue *q) { atomic_init(&q->slots[i].seq, i); q->slots[i].data = NULL; } + + atomic_store_explicit(&q->committed, new_commit, memory_order_release); + + atomic_flag_clear(&q->commit_lock); } void mpmc_push(MPMCQueue *q, FileEntry *item) { @@ -139,6 +157,16 @@ void mpmc_push(MPMCQueue *q, FileEntry *item) { for (;;) { pos = atomic_load_explicit(&q->tail, memory_order_relaxed); + + // ensure the slot is committed BEFORE accessing it + size_t committed = + atomic_load_explicit(&q->committed, memory_order_relaxed); + + if (pos >= committed) { + mpmc_commit_more(q); + continue; + } + slot = &q->slots[pos & q->mask]; size_t seq = atomic_load_explicit(&slot->seq, memory_order_acquire); @@ -153,19 +181,11 @@ void mpmc_push(MPMCQueue *q, FileEntry *item) { } else if (diff < 0) { - size_t committed = - atomic_load_explicit(&q->committed, memory_order_relaxed); - - if (pos >= committed) { - mpmc_commit_more(q); - continue; - } - - Sleep(1000); // queue actually full + Sleep(100); // queue actually full } else { - Sleep(1000); + Sleep(100); } } @@ -197,7 +217,7 @@ FileEntry *mpmc_pop(MPMCQueue *q) { } else if (diff < 0) { - Sleep(1000); + Sleep(500); } else { if (++spins > 10) {