summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Westby <jw+debian@jameswestby.net>2009-10-01 15:09:54 +0100
committerScott James Remnant <scott@ubuntu.com>2009-10-01 15:09:54 +0100
commit03cc20707a3e7b2d8629e84d7a766f41edb8b444 (patch)
tree42ac4152cec8a0a2d91b7124de1119dd22a8ad78
parenta8cf509a06cdc42568e446dea8a54a398e1c003b (diff)
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 <jw+debian@jameswestby.net> Signed-off-by: Scott James Remnant <scott@ubuntu.com>
-rw-r--r--dbus/dbus-connection.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index a59b1a0c..31edd61f 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));