summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2011-07-14 17:23:21 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2011-07-25 18:17:21 +0100
commita725cca0aca483d66d7c92e0590f68ad5ffa1cbe (patch)
tree6503ee89a4552bb33832499259a15d7bfcba792d
parentdc6ae73598bedab9ceac18d6ea693f89cd7cfb26 (diff)
DBusConnection: use atomic accesses to refcount in assertions/initial ref
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
-rw-r--r--dbus/dbus-connection.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index 4b74341c..8b8310dd 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -1318,8 +1318,9 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
if (_dbus_modify_sigpipe)
_dbus_disable_sigpipe ();
-
- connection->refcount.value = 1;
+
+ /* initialized to 0: use atomic op to avoid mixing atomic and non-atomic */
+ _dbus_atomic_inc (&connection->refcount);
connection->transport = transport;
connection->watches = watch_list;
connection->timeouts = timeout_list;
@@ -2655,9 +2656,9 @@ _dbus_connection_last_unref (DBusConnection *connection)
DBusList *link;
_dbus_verbose ("Finalizing connection %p\n", connection);
-
- _dbus_assert (connection->refcount.value == 0);
-
+
+ _dbus_assert (_dbus_atomic_get (&connection->refcount) == 0);
+
/* You have to disconnect the connection before unref:ing it. Otherwise
* you won't get the disconnected message.
*/