gst/udp/gstudpsrc.c: When the socket is used by the app for other purposes, don't...
authorLaurent Glayal <spglegle@yahoo.fr>
Thu, 18 Oct 2007 17:04:14 +0000 (17:04 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 18 Oct 2007 17:04:14 +0000 (17:04 +0000)
Original commit message from CVS:
Based on patch by: Laurent Glayal  <spglegle yahoo fr>
* gst/udp/gstudpsrc.c: (gst_udpsrc_create):
When the socket is used by the app for other purposes, don't generate an
error if there is activaty on the socket that is not data related.
Fixes #487488.

ChangeLog
gst/udp/gstudpsrc.c

index 00b7ab3..df9fcb6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2007-10-18  Wim Taymans  <wim.taymans@gmail.com>
 
+       Based on patch by: Laurent Glayal  <spglegle yahoo fr>
+
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_create):
+       When the socket is used by the app for other purposes, don't generate an
+       error if there is activaty on the socket that is not data related.
+       Fixes #487488.
+
+2007-10-18  Wim Taymans  <wim.taymans@gmail.com>
+
        * sys/v4l2/v4l2src_calls.c: (gst_v4l2_buffer_finalize),
        (gst_v4l2src_grab_frame):
        Add some more debug info. Generate an error when we run out of buffers
index 1689954..d547fea 100644 (file)
@@ -377,6 +377,7 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
 
   udpsrc = GST_UDPSRC (psrc);
 
+retry:
   /* quick check, avoid going in select when we already have data */
   readsize = 0;
   if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0)
@@ -450,8 +451,12 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf)
   if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0)
     goto ioctl_failed;
 
+  /* if we get here and there is nothing to read from the socket, the select got
+   * woken up by activity on the socket but it was not a read. We how someone
+   * will also do something with the socket so that we don't go into an infinite
+   * loop in the select(). */
   if (!readsize)
-    goto nothing_to_read;
+    goto retry;
 
 no_select:
   GST_LOG_OBJECT (udpsrc, "ioctl says %d bytes available", (int) readsize);
@@ -514,13 +519,6 @@ ioctl_failed:
         ("ioctl failed %d: %s (%d)", ret, g_strerror (errno), errno));
     return GST_FLOW_ERROR;
   }
-nothing_to_read:
-  {
-    GST_ELEMENT_ERROR (udpsrc, RESOURCE, READ, (NULL),
-        ("ioctl returned readsize 0 %d: %s (%d)", ret, g_strerror (errno),
-            errno));
-    return GST_FLOW_ERROR;
-  }
 receive_error:
   {
     g_free (pktdata);