Merge branch 'upstream' into dfsg-orig
[debian/gnuradio] / gnuradio-core / src / lib / runtime / gr_msg_queue.cc
index 922eeda03cff5aa80a0e0c5d6f41c1be2c992ad1..3097acc9eecd96ccce1cf1ede1fd0e51112174bb 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005,2009 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
 #include <gr_msg_queue.h>
 #include <stdexcept>
 
-
 gr_msg_queue_sptr
 gr_make_msg_queue(unsigned int limit)
 {
   return gr_msg_queue_sptr (new gr_msg_queue(limit));
 }
 
-
 gr_msg_queue::gr_msg_queue(unsigned int limit)
-  : d_not_empty(&d_mutex), d_not_full(&d_mutex),
+  : d_not_empty(), d_not_full(),
     /*d_head(0), d_tail(0),*/ d_count(0), d_limit(limit)
 {
 }
@@ -51,10 +49,10 @@ gr_msg_queue::insert_tail(gr_message_sptr msg)
   if (msg->d_next)
     throw std::invalid_argument("gr_msg_queue::insert_tail: msg already in queue");
 
-  omni_mutex_lock      l(d_mutex);
+  gruel::scoped_lock guard(d_mutex);
 
   while (full_p())
-    d_not_full.wait();
+    d_not_full.wait(guard);
 
   if (d_tail == 0){
     d_tail = d_head = msg;
@@ -68,17 +66,17 @@ gr_msg_queue::insert_tail(gr_message_sptr msg)
     msg->d_next.reset();
   }
   d_count++;
-  d_not_empty.signal();
+  d_not_empty.notify_one();
 }
 
 gr_message_sptr
 gr_msg_queue::delete_head()
 {
-  omni_mutex_lock      l(d_mutex);
-  gr_message_sptr      m;
+  gruel::scoped_lock guard(d_mutex);
+  gr_message_sptr m;
 
   while ((m = d_head) == 0)
-    d_not_empty.wait();
+    d_not_empty.wait(guard);
 
   d_head = m->d_next;
   if (d_head == 0){
@@ -89,15 +87,15 @@ gr_msg_queue::delete_head()
   d_count--;
   // m->d_next = 0;
   m->d_next.reset();
-  d_not_full.signal();
+  d_not_full.notify_one();
   return m;
 }
 
 gr_message_sptr
 gr_msg_queue::delete_head_nowait()
 {
-  omni_mutex_lock      l(d_mutex);
-  gr_message_sptr      m;
+  gruel::scoped_lock guard(d_mutex);
+  gr_message_sptr m;
 
   if ((m = d_head) == 0){
     //return 0;
@@ -113,7 +111,7 @@ gr_msg_queue::delete_head_nowait()
   d_count--;
   //m->d_next = 0;
   m->d_next.reset();
-  d_not_full.signal();
+  d_not_full.notify_one();
   return m;
 }