diff options
Diffstat (limited to 'gnuradio-runtime/lib/messages/msg_queue.cc')
-rw-r--r-- | gnuradio-runtime/lib/messages/msg_queue.cc | 95 |
1 files changed, 42 insertions, 53 deletions
diff --git a/gnuradio-runtime/lib/messages/msg_queue.cc b/gnuradio-runtime/lib/messages/msg_queue.cc index 321b229358..6476ddc4ee 100644 --- a/gnuradio-runtime/lib/messages/msg_queue.cc +++ b/gnuradio-runtime/lib/messages/msg_queue.cc @@ -28,76 +28,65 @@ #include <stdexcept> namespace gr { - namespace messages { - - msg_queue_sptr - make_msg_queue(unsigned int limit) - { - return msg_queue_sptr(new msg_queue(limit)); - } - - msg_queue::msg_queue(unsigned int limit) - : d_limit(limit) - { - } - - msg_queue::~msg_queue() - { - flush(); - } - - void - msg_queue::insert_tail(pmt::pmt_t msg) - { - gr::thread::scoped_lock guard(d_mutex); - - while(full_p()) +namespace messages { + +msg_queue_sptr make_msg_queue(unsigned int limit) +{ + return msg_queue_sptr(new msg_queue(limit)); +} + +msg_queue::msg_queue(unsigned int limit) : d_limit(limit) {} + +msg_queue::~msg_queue() { flush(); } + +void msg_queue::insert_tail(pmt::pmt_t msg) +{ + gr::thread::scoped_lock guard(d_mutex); + + while (full_p()) d_not_full.wait(guard); - d_msgs.push_back(msg); - d_not_empty.notify_one(); - } + d_msgs.push_back(msg); + d_not_empty.notify_one(); +} - pmt::pmt_t - msg_queue::delete_head() - { - gr::thread::scoped_lock guard(d_mutex); +pmt::pmt_t msg_queue::delete_head() +{ + gr::thread::scoped_lock guard(d_mutex); - while(empty_p()) + while (empty_p()) d_not_empty.wait(guard); - pmt::pmt_t m(d_msgs.front()); - d_msgs.pop_front(); + pmt::pmt_t m(d_msgs.front()); + d_msgs.pop_front(); - if(d_limit > 0) // Unlimited length queues never block on write + if (d_limit > 0) // Unlimited length queues never block on write d_not_full.notify_one(); - return m; - } + return m; +} - pmt::pmt_t - msg_queue::delete_head_nowait() - { - gr::thread::scoped_lock guard(d_mutex); +pmt::pmt_t msg_queue::delete_head_nowait() +{ + gr::thread::scoped_lock guard(d_mutex); - if(empty_p()) + if (empty_p()) return pmt::pmt_t(); - pmt::pmt_t m(d_msgs.front()); - d_msgs.pop_front(); + pmt::pmt_t m(d_msgs.front()); + d_msgs.pop_front(); - if(d_limit > 0) // Unlimited length queues never block on write + if (d_limit > 0) // Unlimited length queues never block on write d_not_full.notify_one(); - return m; - } + return m; +} - void - msg_queue::flush() - { - while(delete_head_nowait() != pmt::pmt_t()) +void msg_queue::flush() +{ + while (delete_head_nowait() != pmt::pmt_t()) ; - } +} - } /* namespace messages */ +} /* namespace messages */ } /* namespace gr */ |