From 042d3a461c84d4c4ecb232f5eff40e1ce77ac03c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 16 Aug 2007 11:49:01 +0000 Subject: [PATCH] gst/udp/gstudpsrc.c: Improve UDP performance by avoiding a select() when we have data available immediatly. Original commit message from CVS: * gst/udp/gstudpsrc.c: (gst_udpsrc_create): Improve UDP performance by avoiding a select() when we have data available immediatly. --- ChangeLog | 6 ++++++ gst/udp/gstudpsrc.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 69a5b2da5d..e5fe5a6e1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-08-16 Wim Taymans + + * gst/udp/gstudpsrc.c: (gst_udpsrc_create): + Improve UDP performance by avoiding a select() when we have data + available immediatly. + 2007-08-16 Wim Taymans * gst/rtsp/gstrtpdec.c: (gst_rtp_dec_marshal_VOID__UINT_UINT), diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index 1c26c56ece..5b847b0a98 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -368,6 +368,14 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf) udpsrc = GST_UDPSRC (psrc); + /* quick check, avoid going in select when we already have data */ + readsize = 0; + if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0) + goto ioctl_failed; + + if (readsize > 0) + goto no_select; + do { gboolean stop; struct timeval timeval, *timeout; @@ -433,11 +441,12 @@ gst_udpsrc_create (GstPushSrc * psrc, GstBuffer ** buf) if ((ret = IOCTL_SOCKET (udpsrc->sock, FIONREAD, &readsize)) < 0) goto ioctl_failed; - GST_LOG_OBJECT (udpsrc, "ioctl says %d bytes available", (int) readsize); - if (!readsize) goto nothing_to_read; +no_select: + GST_LOG_OBJECT (udpsrc, "ioctl says %d bytes available", (int) readsize); + pktdata = g_malloc (readsize); pktsize = readsize;