summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Glayal <spglegle@yahoo.fr>2007-10-18 17:04:14 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-10-18 17:04:14 +0000
commit961c98527027fdb54c64899c0c995115b8870365 (patch)
tree4b6d5e165968d45bd4b0d7f808a47de810d38f90
parent279fe5fac69a36112304acf54af1c5a03e369c15 (diff)
gst/udp/gstudpsrc.c: When the socket is used by the app for other purposes, don't generate an error if there is activ...
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.
-rw-r--r--ChangeLog9
-rw-r--r--gst/udp/gstudpsrc.c14
2 files changed, 15 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 00b7ab37..df9fcb6e 100644
--- 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
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index 16899544..d547fea1 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -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);