shout2: Don't wait if we're late
authorBenjamin Otte <otte@redhat.com>
Thu, 8 Apr 2010 09:54:19 +0000 (11:54 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 8 Apr 2010 13:57:36 +0000 (15:57 +0200)
In fact, due to signedness issues, a negative delay would be changed to
an almost infinite wait causing shout2send to "lock up".

Reported by Christopher Montgomery.

ext/shout2/gstshout2.c

index ec238ae..26f4130 100644 (file)
@@ -648,13 +648,17 @@ gst_shout2send_render (GstBaseSink * basesink, GstBuffer * buf)
 
   delay = shout_delay (sink->conn);
 
-  GST_LOG_OBJECT (sink, "waiting %d msec", delay);
-  if (gst_poll_wait (sink->timer, GST_MSECOND * delay) == -1) {
-    GST_LOG_OBJECT (sink, "unlocked");
-
-    fret = gst_base_sink_wait_preroll (basesink);
-    if (fret != GST_FLOW_OK)
-      return fret;
+  if (delay > 0) {
+    GST_LOG_OBJECT (sink, "waiting %d msec", delay);
+    if (gst_poll_wait (sink->timer, GST_MSECOND * delay) == -1) {
+      GST_LOG_OBJECT (sink, "unlocked");
+
+      fret = gst_base_sink_wait_preroll (basesink);
+      if (fret != GST_FLOW_OK)
+        return fret;
+    }
+  } else {
+    GST_LOG_OBJECT (sink, "we're %d msec late", -delay);
   }
 
   GST_LOG_OBJECT (sink, "sending %u bytes of data", GST_BUFFER_SIZE (buf));