From b5f0b85b485e0309a952150265b5349124070b59 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 24 Jul 2014 18:05:54 +0200 Subject: Core/Misc: Fixed a possible crash in ProducerConsumerQueue::Cancel --- src/server/shared/Threading/ProducerConsumerQueue.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/server/shared/Threading/ProducerConsumerQueue.h') diff --git a/src/server/shared/Threading/ProducerConsumerQueue.h b/src/server/shared/Threading/ProducerConsumerQueue.h index 98a0188b6b5..45a1cbc692a 100644 --- a/src/server/shared/Threading/ProducerConsumerQueue.h +++ b/src/server/shared/Threading/ProducerConsumerQueue.h @@ -26,6 +26,8 @@ template class ProducerConsumerQueue { + static_assert(std::is_pointer::value, "T for ProducerConsumerQueue must be a pointer"); + private: std::mutex _queueLock; std::queue _queue; @@ -38,11 +40,10 @@ public: void Push(const T& value) { - _queueLock.lock(); - - _queue.push(std::move(value)); - - _queueLock.unlock(); + { + std::lock_guard lock(_queueLock); + _queue.push(std::move(value)); + } _condition.notify_one(); } @@ -93,7 +94,7 @@ public: { T& value = _queue.front(); - delete &value; + delete value; _queue.pop(); } -- cgit v1.2.3