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
This commit is contained in:
Vincent Penquerc'h 2012-02-08 21:21:47 +00:00
parent 0c5037072a
commit c835325536

View file

@ -512,12 +512,15 @@ pollthread_func (gpointer data)
{ {
GstShmSink *self = GST_SHM_SINK (data); GstShmSink *self = GST_SHM_SINK (data);
GList *item; GList *item;
GstClockTime timeout = GST_CLOCK_TIME_NONE;
while (!self->stop) { while (!self->stop) {
if (gst_poll_wait (self->poll, GST_CLOCK_TIME_NONE) < 0) if (gst_poll_wait (self->poll, timeout) < 0)
return NULL; return NULL;
timeout = GST_CLOCK_TIME_NONE;
if (self->stop) if (self->stop)
return NULL; return NULL;
@ -561,6 +564,7 @@ pollthread_func (gpointer data)
functions on that new descriptor, so restart the loop, so _wait functions on that new descriptor, so restart the loop, so _wait
will have been called on all elements of self->poll, whether will have been called on all elements of self->poll, whether
they have just been added or not. */ they have just been added or not. */
timeout = 0;
continue; continue;
} }