From e339814224d54c9b048ead2d6965f89790ec318a Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Tue, 10 Jul 2007 16:00:44 +0000 Subject: [PATCH] 2007-07-10 Havoc Pennington * 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 | 7 +++++++ dbus/dbus-connection.c | 10 +++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7b70bc6..ce6ac55 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-07-10 Havoc Pennington + + * 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-07-09 Ralf Habacker * dbus/dbus-sysdeps-win.c,dbus-sysdeps-win.h,dbus-sysdeps-win-util.c, diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index 62ef3da..de69524 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -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 */ -- 2.7.4