Commit 08e092ba authored by Xavier Thompson's avatar Xavier Thompson

Fix deque.hpp atomics bug introduced in refactor

parent c24453b8
......@@ -64,23 +64,24 @@ namespace typon::fdt::lock_free
_bottom.store(bottom, relaxed);
std::atomic_thread_fence(seq_cst);
u64 top = _top.load(relaxed);
if (top > bottom)
pop_type x { Empty };
if (top <= bottom)
{
_bottom.store(top, relaxed);
return { Empty };
}
T x = array->get(bottom);
if (top < bottom)
{
return { x };
x = array->get(bottom);
if (top == bottom)
{
if (!_top.compare_exchange_strong(top, top + 1, seq_cst, relaxed))
{
x = { Empty };
}
_bottom.store(bottom + 1, relaxed);
}
}
bool win = _top.compare_exchange_strong(top, top + 1, seq_cst, relaxed);
_bottom.store(top + 1, relaxed);
if (win)
else
{
return { x };
_bottom.store(bottom + 1, relaxed);
}
return { Empty };
return x;
}
pop_type steal() noexcept
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment