summaryrefslogtreecommitdiff
path: root/dbus
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2011-07-26 16:35:57 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-13 17:54:56 +0000
commit9a654d252983ee6b5cb1b26b0da5ba907991d004 (patch)
tree3be8d581c880f47293cf3d4d2e6ba2003bb23d1a /dbus
parent0136f318f094f459adde3f0553110b1aba4bc199 (diff)
downloaddbus-9a654d252983ee6b5cb1b26b0da5ba907991d004.tar.gz
add and use _dbus_connection_trace_ref
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=37286 Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk> Reviewed-by: Lennart Poettering <lennart@poettering.net>
Diffstat (limited to 'dbus')
-rw-r--r--dbus/dbus-connection.c59
1 files changed, 47 insertions, 12 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index 01e9215a..b8f48adf 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -203,6 +203,27 @@
* @{
*/
+#ifdef DBUS_ENABLE_VERBOSE_MODE
+static void
+_dbus_connection_trace_ref (DBusConnection *connection,
+ int old_refcount,
+ int new_refcount,
+ const char *why)
+{
+ static int enabled = -1;
+
+ _dbus_trace_ref ("DBusConnection", connection, old_refcount, new_refcount,
+ why, "DBUS_CONNECTION_TRACE", &enabled);
+}
+#else
+#define _dbus_connection_trace_ref(c,o,n,w) \
+ do \
+ {\
+ (void) (o); \
+ (void) (n); \
+ } while (0)
+#endif
+
/**
* Internal struct representing a message filter function
*/
@@ -1355,7 +1376,8 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
_dbus_transport_ref (transport);
CONNECTION_UNLOCK (connection);
-
+
+ _dbus_connection_trace_ref (connection, 0, 1, "new_for_transport");
return connection;
error:
@@ -1402,13 +1424,17 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
*/
DBusConnection *
_dbus_connection_ref_unlocked (DBusConnection *connection)
-{
+{
+ dbus_int32_t old_refcount;
+
_dbus_assert (connection != NULL);
_dbus_assert (connection->generation == _dbus_current_generation);
HAVE_LOCK_CHECK (connection);
- _dbus_atomic_inc (&connection->refcount);
+ old_refcount = _dbus_atomic_inc (&connection->refcount);
+ _dbus_connection_trace_ref (connection, old_refcount, old_refcount + 1,
+ "ref_unlocked");
return connection;
}
@@ -1422,15 +1448,18 @@ _dbus_connection_ref_unlocked (DBusConnection *connection)
void
_dbus_connection_unref_unlocked (DBusConnection *connection)
{
- dbus_bool_t last_unref;
+ dbus_int32_t old_refcount;
HAVE_LOCK_CHECK (connection);
-
+
_dbus_assert (connection != NULL);
- last_unref = (_dbus_atomic_dec (&connection->refcount) == 1);
+ old_refcount = _dbus_atomic_dec (&connection->refcount);
- if (last_unref)
+ _dbus_connection_trace_ref (connection, old_refcount, old_refcount - 1,
+ "unref_unlocked");
+
+ if (old_refcount == 1)
_dbus_connection_last_unref (connection);
}
@@ -2607,10 +2636,13 @@ dbus_connection_open_private (const char *address,
DBusConnection *
dbus_connection_ref (DBusConnection *connection)
{
+ dbus_int32_t old_refcount;
+
_dbus_return_val_if_fail (connection != NULL, NULL);
_dbus_return_val_if_fail (connection->generation == _dbus_current_generation, NULL);
-
- _dbus_atomic_inc (&connection->refcount);
+ old_refcount = _dbus_atomic_inc (&connection->refcount);
+ _dbus_connection_trace_ref (connection, old_refcount, old_refcount + 1,
+ "ref");
return connection;
}
@@ -2739,14 +2771,17 @@ _dbus_connection_last_unref (DBusConnection *connection)
void
dbus_connection_unref (DBusConnection *connection)
{
- dbus_bool_t last_unref;
+ dbus_int32_t old_refcount;
_dbus_return_if_fail (connection != NULL);
_dbus_return_if_fail (connection->generation == _dbus_current_generation);
- last_unref = (_dbus_atomic_dec (&connection->refcount) == 1);
+ old_refcount = _dbus_atomic_dec (&connection->refcount);
+
+ _dbus_connection_trace_ref (connection, old_refcount, old_refcount - 1,
+ "unref");
- if (last_unref)
+ if (old_refcount == 1)
{
#ifndef DBUS_DISABLE_CHECKS
if (_dbus_transport_get_is_connected (connection->transport))