From c83532553663218d7e89590afa574429bc1a3fe3 Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Wed, 8 Feb 2012 21:21:47 +0000 Subject: [PATCH] shmsink: fix indefinite wait after adding a new fd to the poll set If the second call to _wait blocks, we will not signal the condition variable, so ensure that second call is not blocking. See rationale and information in the linked bug: https://bugzilla.gnome.org/show_bug.cgi?id=669697 --- sys/shm/gstshmsink.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/shm/gstshmsink.c b/sys/shm/gstshmsink.c index 111fbbf0f5..fd7ffb4edf 100644 --- a/sys/shm/gstshmsink.c +++ b/sys/shm/gstshmsink.c @@ -512,12 +512,15 @@ pollthread_func (gpointer data) { GstShmSink *self = GST_SHM_SINK (data); GList *item; + GstClockTime timeout = GST_CLOCK_TIME_NONE; while (!self->stop) { - if (gst_poll_wait (self->poll, GST_CLOCK_TIME_NONE) < 0) + if (gst_poll_wait (self->poll, timeout) < 0) return NULL; + timeout = GST_CLOCK_TIME_NONE; + if (self->stop) return NULL; @@ -561,6 +564,7 @@ pollthread_func (gpointer data) functions on that new descriptor, so restart the loop, so _wait will have been called on all elements of self->poll, whether they have just been added or not. */ + timeout = 0; continue; }