]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Correct timeout handling
authorJames Westby <jw+debian@jameswestby.net>
Thu, 1 Oct 2009 14:09:54 +0000 (15:09 +0100)
committerScott James Remnant <scott@ubuntu.com>
Thu, 1 Oct 2009 14:09:54 +0000 (15:09 +0100)
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>
dbus/dbus-connection.c

index a59b1a0cbc22a686b5e527e0c73ae1e2d65ee2cf..31edd61f2dd8cbfdc08fd0b6068b5b86ac15df91 100644 (file)
@@ -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));