summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2019-12-17 14:11:20 -0500
committerGravatar GitHub2019-12-17 14:11:20 -0500
commit8825b88a4589c249e9faa53f3ec90e582fa64198 (patch)
treeed8924086e528f13e5d38b100cad9a38e06c4d3a
parentMerge pull request #3182 from ReinUsesLisp/renderer-opengl (diff)
parentcommon: SPSCQueue: Notify after incrementing queue size. (diff)
downloadyuzu-8825b88a4589c249e9faa53f3ec90e582fa64198.tar.gz
yuzu-8825b88a4589c249e9faa53f3ec90e582fa64198.tar.xz
yuzu-8825b88a4589c249e9faa53f3ec90e582fa64198.zip
Merge pull request #3173 from yuzu-emu/bunnei-spscqueue
common: SPSCQueue: Notify after incrementing queue size.
-rw-r--r--src/common/threadsafe_queue.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/common/threadsafe_queue.h b/src/common/threadsafe_queue.h
index e714ba5b3..8268bbd5c 100644
--- a/src/common/threadsafe_queue.h
+++ b/src/common/threadsafe_queue.h
@@ -46,9 +46,16 @@ public:
46 ElementPtr* new_ptr = new ElementPtr(); 46 ElementPtr* new_ptr = new ElementPtr();
47 write_ptr->next.store(new_ptr, std::memory_order_release); 47 write_ptr->next.store(new_ptr, std::memory_order_release);
48 write_ptr = new_ptr; 48 write_ptr = new_ptr;
49 cv.notify_one();
50 49
51 ++size; 50 const size_t previous_size{size++};
51
52 // Acquire the mutex and then immediately release it as a fence.
53 // TODO(bunnei): This can be replaced with C++20 waitable atomics when properly supported.
54 // See discussion on https://github.com/yuzu-emu/yuzu/pull/3173 for details.
55 if (previous_size == 0) {
56 std::lock_guard lock{cv_mutex};
57 }
58 cv.notify_one();
52 } 59 }
53 60
54 void Pop() { 61 void Pop() {