]> git.mxchange.org Git - simgear.git/commitdiff
Make SGLockingQueue::pop usable.
authorJames Turner <zakalawe@mac.com>
Sun, 25 Nov 2012 22:36:15 +0000 (22:36 +0000)
committerJames Turner <zakalawe@mac.com>
Sun, 25 Nov 2012 22:36:15 +0000 (22:36 +0000)
Since there's no external lock, it was impossible to check the queue was non-empty before a pop, without a race condition. To avoid this, tolerate an empty queue and return a default constructed value.

simgear/threads/SGQueue.hxx

index 37122c5ae150be619b48a62e85cba2ad1a6393ea..c4fab564c36d7f9df8ee865163952e11b6e7297c 100644 (file)
@@ -127,8 +127,8 @@ public:
      */
     virtual T pop() {
        SGGuard<SGMutex> g(mutex);
-       //if (fifo.empty()) throw NoSuchElementException();
-       assert( ! this->fifo.empty() );
+           if (this->fifo.empty()) return T(); // assumes T is default constructable
+        
 //     if (fifo.empty())
 //     {
 //         mutex.unlock();