udpsrc: improve timeouts
authorWim Taymans <wim.taymans@collabora.co.uk>
Wed, 12 Dec 2012 10:08:13 +0000 (11:08 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Wed, 12 Dec 2012 10:08:13 +0000 (11:08 +0100)
Make it possible to set the timeout after we went to the READY state by using
the timeout when checking the condition. This also makes it possible to set the
timeout with a higher granularity than seconds.

gst/udp/gstudpsrc.c

index e684012..bd7082d 100644 (file)
@@ -382,13 +382,20 @@ retry:
     goto no_select;
 
   do {
+    gint64 timeout;
+
     try_again = FALSE;
 
+    if (udpsrc->timeout)
+      timeout = udpsrc->timeout / 1000;
+    else
+      timeout = -1;
+
     GST_LOG_OBJECT (udpsrc, "doing select, timeout %" G_GUINT64_FORMAT,
-        udpsrc->timeout);
+        timeout);
 
-    if (!g_socket_condition_wait (udpsrc->used_socket, G_IO_IN | G_IO_PRI,
-            udpsrc->cancellable, &err)) {
+    if (!g_socket_condition_timed_wait (udpsrc->used_socket, G_IO_IN | G_IO_PRI,
+            timeout, udpsrc->cancellable, &err)) {
       if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_BUSY)
           || g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
         goto stopped;
@@ -808,9 +815,6 @@ gst_udpsrc_start (GstBaseSrc * bsrc)
       goto getsockname_error;
   }
 
-  if (src->timeout)
-    g_socket_set_timeout (src->used_socket, src->timeout / GST_SECOND);
-
 #ifdef SO_RCVBUF
   {
     gint rcvsize, ret;