systemclock: Only retry writing to the socket for EAGAIN, EWOULDBLOCK and EINTR
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 12 May 2011 13:51:22 +0000 (15:51 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 14 May 2011 09:39:35 +0000 (11:39 +0200)
Fixes infinite loop in some cases, bug #650002.

gst/gstsystemclock.c

index 10ad4ed..daea190 100644 (file)
@@ -326,9 +326,16 @@ gst_system_clock_add_wakeup (GstSystemClock * sysclock)
   if (sysclock->priv->wakeup_count == 0) {
     GST_CAT_DEBUG (GST_CAT_CLOCK, "writing control");
     while (!gst_poll_write_control (sysclock->priv->timer)) {
-      g_warning
-          ("gstsystemclock: write control failed in wakeup_async, trying again : %d:%s\n",
-          errno, g_strerror (errno));
+      if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
+        g_warning
+            ("gstsystemclock: write control failed in wakeup_async, trying again: %d:%s\n",
+            errno, g_strerror (errno));
+      } else {
+        g_critical
+            ("gstsystemclock: write control failed in wakeup_async: %d:%s\n",
+            errno, g_strerror (errno));
+        return;
+      }
     }
   }
   sysclock->priv->wakeup_count++;