shmsink: fix indefinite wait after adding a new fd to the poll set
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 8 Feb 2012 21:21:47 +0000 (21:21 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 9 Feb 2012 18:15:09 +0000 (18:15 +0000)
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

index 111fbbf..fd7ffb4 100644 (file)
@@ -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;
     }