From 63b77dd60701ce6b02ce3e121f34815531ebe328 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 14 Jul 2011 17:14:06 +0100 Subject: [PATCH 5/9] _dbus_connection_close_if_only_one_ref: use _dbus_atomic_get --- dbus/dbus-connection.c | 18 +++++------------- 1 files changed, 5 insertions(+), 13 deletions(-) diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index a1f3320..4b74341 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -2116,23 +2116,15 @@ _dbus_connection_send_and_unlock (DBusConnection *connection, void _dbus_connection_close_if_only_one_ref (DBusConnection *connection) { - dbus_int32_t tmp_refcount; + dbus_int32_t refcount; CONNECTION_LOCK (connection); - /* We increment and then decrement the refcount, because there is no - * _dbus_atomic_get (mirroring the fact that there's no InterlockedGet - * on Windows). */ - _dbus_atomic_inc (&connection->refcount); - tmp_refcount = _dbus_atomic_dec (&connection->refcount); - - /* The caller should have one ref, and this function temporarily took - * one more, which is reflected in this count even though we already - * released it (relying on the caller's ref) due to _dbus_atomic_dec - * semantics */ - _dbus_assert (tmp_refcount >= 2); + refcount = _dbus_atomic_get (&connection->refcount); + /* The caller should have at least one ref */ + _dbus_assert (refcount >= 1); - if (tmp_refcount == 2) + if (refcount == 1) _dbus_connection_close_possibly_shared_and_unlock (connection); else CONNECTION_UNLOCK (connection); -- 1.7.5.4