On Sun, Feb 19, 2012 at 6:29 PM, Ryan Pape <ryan.p...@gmail.com> wrote:

> I have an application with some nasty race conditions I am trying to
> pin-point.
>
> The application starts with a 256 channel filterbank. Approx 45 outputs
> are connected to files, a handful to other blocks ending with a custom
> block that puts messages in a GR message queue.
>
> The application has a separate thread that is constantly de-queueing items
> produced by my custom blocks.
>
> Occasionally, and randomly, one of the chains with my custom block appears
> to stall for an extended time and puts no messages into the queue.  It
> appears it may restart at a random later time, and in every case I have
> observed restarting the application fixes the problem immediately. At the
> same time, another chain continues to send messages as I would expect.
>
> Is having two or more producers and one consumer on one GR message queue
> across multiple threads a bad idea?  I'm not employing any additional
> locking on the queue, due to wishful thinking and ignorance.  I could move
> to a one consumer for each producer model and it would not significantly
> change my application.
>
> Ryan
>

Ryan,
So the custom sinks are doing an insert_tail onto the msg_queue and the
other thread is doing a delete_head() to get the messages out?

Are they all going into the same queue, or does each sink have it's own
queue to send messages to?

The insert_tail and delete_head both lock a mutex when called, so they are
(or should be) thread safe. I'm trying to get a clearer picture of your
setup to see what else could be happening.

Tom


>
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to