From d44bb6ef64bf309efa393d8c89138ba23ad6c004 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 16 Jan 2012 15:49:50 +0100 Subject: [PATCH] GSocket: Reset the timeout in the GSocket GSource after it was triggered https://bugzilla.gnome.org/show_bug.cgi?id=667989 --- gio/gsocket.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/gio/gsocket.c b/gio/gsocket.c index d985e9e..110e049 100644 --- a/gio/gsocket.c +++ b/gio/gsocket.c @@ -3112,6 +3112,8 @@ socket_source_dispatch (GSource *source, { GSocketSourceFunc func = (GSocketSourceFunc)callback; GSocketSource *socket_source = (GSocketSource *)source; + GSocket *socket = socket_source->socket; + gboolean ret; #ifdef G_OS_WIN32 socket_source->pollfd.revents = update_condition (socket_source->socket); @@ -3119,9 +3121,18 @@ socket_source_dispatch (GSource *source, if (socket_source->socket->priv->timed_out) socket_source->pollfd.revents |= socket_source->condition & (G_IO_IN | G_IO_OUT); - return (*func) (socket_source->socket, - socket_source->pollfd.revents & socket_source->condition, - user_data); + ret = (*func) (socket, + socket_source->pollfd.revents & socket_source->condition, + user_data); + + if (socket->priv->timeout) + socket_source->timeout_time = g_get_monotonic_time () + + socket->priv->timeout * 1000000; + + else + socket_source->timeout_time = 0; + + return ret; } static void -- 2.7.4