diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-07-14 17:23:21 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-07-25 18:17:21 +0100 |
commit | a725cca0aca483d66d7c92e0590f68ad5ffa1cbe (patch) | |
tree | 6503ee89a4552bb33832499259a15d7bfcba792d | |
parent | dc6ae73598bedab9ceac18d6ea693f89cd7cfb26 (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.c | 11 |
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. */ |