From dbbdf54778771535dfea5ddbdeeaba89d9bc7be6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 12 Dec 2012 11:08:13 +0100 Subject: [PATCH 1/2] 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 bdad5b3..5b54021 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -397,13 +397,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; @@ -823,9 +830,6 @@ gst_udpsrc_start (GstBaseSrc * bsrc) goto getsockname_error; } - if (src->timeout) - g_socket_set_timeout (src->used_socket, src->timeout / GST_SECOND); - #if GLIB_CHECK_VERSION (2, 35, 7) { gint val = 0; -- 1.8.1.2