From 32bd981303275674b003e0a07307e226bd4486cd Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 12 Dec 2012 11:08:13 +0100 Subject: [PATCH] udpsrc: improve timeouts 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 | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index e684012..bd7082d 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -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; -- 2.7.4