diff --git a/src/common/threadsafe_queue.h b/src/common/threadsafe_queue.h index 68955d66d..c5fb7a27c 100644 --- a/src/common/threadsafe_queue.h +++ b/src/common/threadsafe_queue.h @@ -15,10 +15,10 @@ #include "common/common_types.h" namespace Common { -template +template class SPSCQueue { public: - SPSCQueue() : size(0) { + SPSCQueue() { write_ptr = read_ptr = new ElementPtr(); } ~SPSCQueue() { @@ -27,12 +27,11 @@ public: } u32 Size() const { - static_assert(NeedSize, "using Size() on FifoQueue without NeedSize"); return size.load(); } bool Empty() const { - return !read_ptr->next.load(); + return Size() == 0; } T& Front() const { @@ -48,14 +47,14 @@ public: ElementPtr* new_ptr = new ElementPtr(); write_ptr->next.store(new_ptr, std::memory_order_release); write_ptr = new_ptr; - if (NeedSize) - size++; cv.notify_one(); + + ++size; } void Pop() { - if (NeedSize) - size--; + --size; + ElementPtr* tmpptr = read_ptr; // advance the read pointer read_ptr = tmpptr->next.load(); @@ -68,8 +67,7 @@ public: if (Empty()) return false; - if (NeedSize) - size--; + --size; ElementPtr* tmpptr = read_ptr; read_ptr = tmpptr->next.load(std::memory_order_acquire); @@ -123,7 +121,7 @@ private: // a simple thread-safe, // single reader, multiple writer queue -template +template class MPSCQueue { public: u32 Size() const { @@ -162,7 +160,7 @@ public: } private: - SPSCQueue spsc_queue; + SPSCQueue spsc_queue; std::mutex write_lock; }; } // namespace Common diff --git a/src/core/core_timing.h b/src/core/core_timing.h index 617c7c6d6..a51c00bba 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -218,7 +218,7 @@ private: u64 event_fifo_id = 0; // the queue for storing the events from other threads threadsafe until they will be added // to the event_queue by the emu thread - Common::MPSCQueue ts_queue; + Common::MPSCQueue ts_queue; s64 idled_cycles = 0; // Are we in a function that has been called from Advance()