GNOME Bugzilla – Bug 369942
[PATCH] unblocking blocked pad does not release all blocked threads
Last modified: 2006-11-30 22:16:31 UTC
GST_PAD_BLOCK_SIGNAL only wakes up a single thread waiting on a blocked pad. However, it is possible to have more than 1 thread blocked, e.g. in the situation elementX ! queue: - elementX sends event, is queued, queue_loop tries to send out and blocks src - elementX (after sending event) performs pad_alloc, this thread crosses the "queue thread boundary" and is also blocked on queue.src
Created attachment 75924 [details] [review] Possible patch Simple patch; use _broadcast in stead of _signal. Wake up all waiting threads when unblocking blocked pad.
Patch by: Mark Nauwelaerts <manauw at skynet dot be> * gst/gstpad.c: (gst_pad_init), (pre_activate), (gst_pad_set_blocked_async), (gst_pad_acceptcaps_default), (gst_pad_accept_caps), (handle_pad_block), (gst_pad_push_event): Some small cleanups. Improve debugging. * gst/gstpad.h: Signal all waiting threads with a broadcast instead of just one. Fixes #369942.