/* -*- 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)
{
}
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;
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){
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;
d_count--;
//m->d_next = 0;
m->d_next.reset();
- d_not_full.signal();
+ d_not_full.notify_one();
return m;
}