diff --git a/src/butil/containers/mpsc_queue.h b/src/butil/containers/mpsc_queue.h index f9e1d78099..6db50f285c 100644 --- a/src/butil/containers/mpsc_queue.h +++ b/src/butil/containers/mpsc_queue.h @@ -129,13 +129,12 @@ bool MPSCQueue::DequeueImpl(T* data) { if (_cur_dequeue_node) { node = _cur_dequeue_node; } else { - node = _cur_enqueue_node.load(memory_order_relaxed); + node = _cur_enqueue_node.exchange(NULL, memory_order_relaxed); } if (!node) { return false; } - _cur_enqueue_node.store(NULL, memory_order_relaxed); if (data) { auto mem = (T* const)node->data_mem; *data = std::move(*mem);