From: James Westby Date: Thu, 1 Oct 2009 14:09:54 +0000 (+0100) Subject: Correct timeout handling X-Git-Tag: dbus-1.3.1~269 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=03cc20707a3e7b2d8629e84d7a766f41edb8b444;p=thirdparty%2Fdbus.git Correct timeout handling The timeout handling code subtracts the elapsed time from the timeout each time a message is received, which drastically reduces the timeout in circumstances such as service activation. Correct so that the timeout is never modified, and the elapsed time instead subtracted where necessary. Signed-off-by: James Westby Signed-off-by: Scott James Remnant --- diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index a59b1a0cb..31edd61f2 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -2392,7 +2392,7 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending) */ _dbus_verbose ("dbus_connection_send_with_reply_and_block() waiting for more memory\n"); - _dbus_memory_pause_based_on_timeout (timeout_milliseconds); + _dbus_memory_pause_based_on_timeout (timeout_milliseconds - elapsed_milliseconds); } else { @@ -2400,7 +2400,7 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending) _dbus_connection_do_iteration_unlocked (connection, DBUS_ITERATION_DO_READING | DBUS_ITERATION_BLOCK, - timeout_milliseconds); + timeout_milliseconds - elapsed_milliseconds); } goto recheck_status; @@ -2409,9 +2409,7 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending) _dbus_verbose ("dbus_connection_send_with_reply_and_block(): clock set backward\n"); else if (elapsed_milliseconds < timeout_milliseconds) { - timeout_milliseconds -= elapsed_milliseconds; - _dbus_verbose ("dbus_connection_send_with_reply_and_block(): %d milliseconds remain\n", timeout_milliseconds); - _dbus_assert (timeout_milliseconds >= 0); + _dbus_verbose ("dbus_connection_send_with_reply_and_block(): %d milliseconds remain\n", timeout_milliseconds - elapsed_milliseconds); if (status == DBUS_DISPATCH_NEED_MEMORY) { @@ -2421,7 +2419,7 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending) */ _dbus_verbose ("dbus_connection_send_with_reply_and_block() waiting for more memory\n"); - _dbus_memory_pause_based_on_timeout (timeout_milliseconds); + _dbus_memory_pause_based_on_timeout (timeout_milliseconds - elapsed_milliseconds); } else { @@ -2429,14 +2427,14 @@ _dbus_connection_block_pending_call (DBusPendingCall *pending) _dbus_connection_do_iteration_unlocked (connection, DBUS_ITERATION_DO_READING | DBUS_ITERATION_BLOCK, - timeout_milliseconds); + timeout_milliseconds - elapsed_milliseconds); } goto recheck_status; } _dbus_verbose ("dbus_connection_send_with_reply_and_block(): Waited %ld milliseconds and got no reply\n", - (tv_sec - start_tv_sec) * 1000 + (tv_usec - start_tv_usec) / 1000); + elapsed_milliseconds); _dbus_assert (!_dbus_pending_call_get_completed_unlocked (pending));