On Mon, Feb 20, 2012 at 10:28 AM, Tom Rondeau <t...@trondeau.com> wrote:

> 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.
>>
>>
>> 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, thank you for the reply.

You are correct with insert_tail from custom sink (2-5 in the application,
1-10msgs/second each at peak) into ONE queue. A separate thread
continuously looping and delete_head()
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to