X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=gnuradio-core%2Fsrc%2Flib%2Fruntime%2Fgr_msg_queue.cc;fp=gnuradio-core%2Fsrc%2Flib%2Fruntime%2Fgr_msg_queue.cc;h=3097acc9eecd96ccce1cf1ede1fd0e51112174bb;hb=35e43e8d8c271e6842191cac3fc3f2f88a861183;hp=922eeda03cff5aa80a0e0c5d6f41c1be2c992ad1;hpb=ea29b08aeb54227e6628f655ccfdb96fe4d8c378;p=debian%2Fgnuradio diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.cc b/gnuradio-core/src/lib/runtime/gr_msg_queue.cc index 922eeda0..3097acc9 100644 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.cc +++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.cc @@ -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 * @@ -26,16 +26,14 @@ #include #include - 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; }