summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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() {