2003-02-27 Havoc Pennington <hp@pobox.com>
authorHavoc Pennington <hp@redhat.com>
Thu, 27 Feb 2003 05:12:39 +0000 (05:12 +0000)
committerHavoc Pennington <hp@redhat.com>
Thu, 27 Feb 2003 05:12:39 +0000 (05:12 +0000)
* dbus/dbus-connection.c
(dbus_connection_send_message_with_reply_and_block): fix doh!
doh! doh! bug that resulted in never removing a reply from the
queue, no wonder we called get_reply_serial so much ;-)

* dbus/dbus-message.c (struct DBusMessage): cache reply serial
and client serial instead of demarshaling them every time

ChangeLog
dbus/dbus-connection.c
dbus/dbus-message.c

index d82fe5d..7061761 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2003-02-27  Havoc Pennington  <hp@pobox.com>
 
+       * dbus/dbus-connection.c
+       (dbus_connection_send_message_with_reply_and_block): fix doh!
+       doh! doh! bug that resulted in never removing a reply from the
+       queue, no wonder we called get_reply_serial so much ;-)
+       
+       * dbus/dbus-message.c (struct DBusMessage): cache reply serial
+       and client serial instead of demarshaling them every time
+
+2003-02-27  Havoc Pennington  <hp@pobox.com>
+
        * dbus/dbus-marshal.c (_dbus_demarshal_int32): rewrite to be much
        more inlined, using dbus-string-private.h, speeds things up 
        substantially
index 4990cff..134736d 100644 (file)
@@ -1320,7 +1320,7 @@ dbus_connection_send_message_with_reply_and_block (DBusConnection     *connectio
 
       if (_dbus_message_get_reply_serial (reply) == client_serial)
        {
-         _dbus_list_remove (&connection->incoming_messages, link);
+         _dbus_list_remove_link (&connection->incoming_messages, link);
          dbus_message_ref (reply);
 
          if (result)
index 1a112a7..09ebeef 100644 (file)
@@ -91,6 +91,10 @@ struct DBusMessage
   HeaderField header_fields[FIELD_LAST]; /**< Track the location
                                            * of each field in "header"
                                            */
+
+  dbus_int32_t client_serial; /**< Cached client serial value for speed */
+  dbus_int32_t reply_serial;  /**< Cached reply serial value for speed */
+  
   int header_padding; /**< bytes of alignment in header */
   
   DBusString body;   /**< Body network data. */
@@ -528,9 +532,10 @@ _dbus_message_set_client_serial (DBusMessage  *message,
 {
   _dbus_assert (!message->locked);
   _dbus_assert (_dbus_message_get_client_serial (message) < 0);
-
+  
   set_int_field (message, FIELD_CLIENT_SERIAL,
                  client_serial);
+  message->client_serial = client_serial;
 }
 
 /**
@@ -547,8 +552,14 @@ _dbus_message_set_reply_serial (DBusMessage  *message,
 {
   _dbus_assert (!message->locked);
 
-  return set_int_field (message, FIELD_REPLY_SERIAL,
-                        reply_serial);
+  if (set_int_field (message, FIELD_REPLY_SERIAL,
+                     reply_serial))
+    {
+      message->reply_serial = reply_serial;
+      return TRUE;
+    }
+  else
+    return FALSE;
 }
 
 /**
@@ -566,7 +577,7 @@ _dbus_message_set_reply_serial (DBusMessage  *message,
 dbus_int32_t
 _dbus_message_get_client_serial (DBusMessage *message)
 {
-  return get_int_field (message, FIELD_CLIENT_SERIAL);
+  return message->client_serial;
 }
 
 /**
@@ -579,7 +590,7 @@ _dbus_message_get_client_serial (DBusMessage *message)
 dbus_int32_t
 _dbus_message_get_reply_serial  (DBusMessage *message)
 {
-  return get_int_field (message, FIELD_REPLY_SERIAL);
+  return message->reply_serial;
 }
 
 /**
@@ -728,6 +739,8 @@ dbus_message_new_empty_header (void)
   
   message->refcount = 1;
   message->byte_order = DBUS_COMPILER_BYTE_ORDER;
+  message->client_serial = -1;
+  message->reply_serial = -1;
   
   i = 0;
   while (i < FIELD_LAST)
@@ -2722,6 +2735,12 @@ _dbus_message_loader_return_buffer (DBusMessageLoader  *loader,
           _dbus_assert (_dbus_string_get_length (&message->header) == header_len);
           _dbus_assert (_dbus_string_get_length (&message->body) == body_len);
 
+          /* Fill in caches */
+          message->reply_serial = get_int_field (message,
+                                                 FIELD_REPLY_SERIAL);
+          message->client_serial = get_int_field (message,
+                                                  FIELD_CLIENT_SERIAL);
+          
          _dbus_verbose ("Loaded message %p\n", message);
        }
       else