]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
2007-07-10 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Tue, 10 Jul 2007 16:00:44 +0000 (16:00 +0000)
committerHavoc Pennington <hp@redhat.com>
Tue, 10 Jul 2007 16:00:44 +0000 (16:00 +0000)
* dbus/dbus-connection.c (struct DBusConnection): Fix from Olivier
Hochreutiner to avoid trying to protect individual bits in a word
with different locks (make dispatch_acquired and io_path_acquired
dbus_bool_t rather than bitfields)

ChangeLog
dbus/dbus-connection.c

index d9d6e66f7c15c476b478ea85dc801550ff294daa..d3c200414a6090361508199cd6dc84e0d43da8fd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-07-10  Havoc Pennington  <hp@redhat.com>
+
+       * dbus/dbus-connection.c (struct DBusConnection): Fix from Olivier
+       Hochreutiner to avoid trying to protect individual bits in a word
+       with different locks (make dispatch_acquired and io_path_acquired
+       dbus_bool_t rather than bitfields)
+
 2007-06-08  Havoc Pennington  <hp@redhat.com>
 
        * backport fix to allow a server to use port=0 or omit port so 
index 5dc463a4cf0538f4e5bd93aa7478521e36d9c7fc..1fef2b6c06c7ce516631dc53ceebda358e78e013 100644 (file)
@@ -281,10 +281,14 @@ struct DBusConnection
 
   char *server_guid; /**< GUID of server if we are in shared_connections, #NULL if server GUID is unknown or connection is private */
 
+  /* These two MUST be bools and not bitfields, because they are protected by a separate lock
+   * from connection->mutex and all bitfields in a word have to be read/written together.
+   * So you can't have a different lock for different bitfields in the same word.
+   */
+  dbus_bool_t dispatch_acquired; /**< Someone has dispatch path (can drain incoming queue) */
+  dbus_bool_t io_path_acquired;  /**< Someone has transport io path (can use the transport to read/write messages) */
+  
   unsigned int shareable : 1; /**< #TRUE if libdbus owns a reference to the connection and can return it from dbus_connection_open() more than once */
-
-  unsigned int dispatch_acquired : 1; /**< Someone has dispatch path (can drain incoming queue) */
-  unsigned int io_path_acquired : 1;  /**< Someone has transport io path (can use the transport to read/write messages) */
   
   unsigned int exit_on_disconnect : 1; /**< If #TRUE, exit after handling disconnect signal */