Commit 7ba7b9a9 authored by Simon McVittie's avatar Simon McVittie
parent 92649656
......@@ -79,6 +79,27 @@ struct DBusPendingCall
unsigned int timeout_added : 1; /**< Have added the timeout */
};
#ifdef DBUS_ENABLE_VERBOSE_MODE
static void
_dbus_pending_call_trace_ref (DBusPendingCall *pending_call,
int old_refcount,
int new_refcount,
const char *why)
{
static int enabled = -1;
_dbus_trace_ref ("DBusPendingCall", pending_call, old_refcount,
new_refcount, why, "DBUS_PENDING_CALL_TRACE", &enabled);
}
#else
#define _dbus_pending_call_trace_ref(p, o, n, w) \
do \
{\
(void) (o); \
(void) (n); \
} while (0)
#endif
static dbus_int32_t notify_user_data_slot = -1;
/**
......@@ -140,7 +161,9 @@ _dbus_pending_call_new_unlocked (DBusConnection *connection,
_dbus_connection_ref_unlocked (pending->connection);
_dbus_data_slot_list_init (&pending->slot_list);
_dbus_pending_call_trace_ref (pending, 0, 1, "new_unlocked");
return pending;
}
......@@ -377,7 +400,11 @@ _dbus_pending_call_set_timeout_error_unlocked (DBusPendingCall *pending,
DBusPendingCall *
_dbus_pending_call_ref_unlocked (DBusPendingCall *pending)
{
_dbus_atomic_inc (&pending->refcount);
dbus_int32_t old_refcount;
old_refcount = _dbus_atomic_inc (&pending->refcount);
_dbus_pending_call_trace_ref (pending, old_refcount, old_refcount + 1,
"ref_unlocked");
return pending;
}
......@@ -440,6 +467,8 @@ _dbus_pending_call_unref_and_unlock (DBusPendingCall *pending)
old_refcount = _dbus_atomic_dec (&pending->refcount);
_dbus_assert (old_refcount > 0);
_dbus_pending_call_trace_ref (pending, old_refcount,
old_refcount - 1, "unref_and_unlock");
CONNECTION_UNLOCK (pending->connection);
......@@ -554,9 +583,13 @@ _dbus_pending_call_set_data_unlocked (DBusPendingCall *pending,
DBusPendingCall *
dbus_pending_call_ref (DBusPendingCall *pending)
{
dbus_int32_t old_refcount;
_dbus_return_val_if_fail (pending != NULL, NULL);
_dbus_atomic_inc (&pending->refcount);
old_refcount = _dbus_atomic_inc (&pending->refcount);
_dbus_pending_call_trace_ref (pending, old_refcount, old_refcount + 1,
"ref");
return pending;
}
......@@ -570,13 +603,15 @@ dbus_pending_call_ref (DBusPendingCall *pending)
void
dbus_pending_call_unref (DBusPendingCall *pending)
{
dbus_bool_t last_unref;
dbus_int32_t old_refcount;
_dbus_return_if_fail (pending != NULL);
last_unref = (_dbus_atomic_dec (&pending->refcount) == 1);
old_refcount = _dbus_atomic_dec (&pending->refcount);
_dbus_pending_call_trace_ref (pending, old_refcount, old_refcount - 1,
"unref");
if (last_unref)
if (old_refcount == 1)
_dbus_pending_call_last_unref(pending);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment