dbus_message_get_signature (message),
dbus_message_get_reply_serial (message),
connection,
- connection->n_incoming);}
+ connection->n_incoming);
+
+ _dbus_message_trace_ref (message, -1, -1,
+ "_dbus_conection_queue_received_message_link");
+}
/**
* Adds a link + message to the incoming message queue.
connection->n_incoming += 1;
_dbus_connection_wakeup_mainloop (connection);
-
+
+ _dbus_message_trace_ref (link->data, -1, -1,
+ "_dbus_connection_queue_synthesized_message_link");
+
_dbus_verbose ("Synthesized message %p added to incoming queue %p, %d incoming\n",
link->data, connection, connection->n_incoming);
}
CONNECTION_UNLOCK (connection);
+ _dbus_message_trace_ref (message, -1, -1, "dbus_connection_borrow_message");
+
/* We don't update dispatch status until it's returned or stolen */
return message;
status = _dbus_connection_get_dispatch_status_unlocked (connection);
_dbus_connection_update_dispatch_status_and_unlock (connection, status);
+
+ _dbus_message_trace_ref (message, -1, -1, "dbus_connection_return_message");
}
/**
status = _dbus_connection_get_dispatch_status_unlocked (connection);
_dbus_connection_update_dispatch_status_and_unlock (connection, status);
+ _dbus_message_trace_ref (message, -1, -1,
+ "dbus_connection_steal_borrowed_message");
}
/* See dbus_connection_pop_message, but requires the caller to own
dbus_message_get_signature (link->data),
connection, connection->n_incoming);
+ _dbus_message_trace_ref (link->data, -1, -1,
+ "_dbus_connection_pop_message_link_unlocked");
+
check_disconnected_message_arrived_unlocked (connection, link->data);
return link;
"no member",
dbus_message_get_signature (message_link->data),
connection, connection->n_incoming);
+
+ _dbus_message_trace_ref (message_link->data, -1, -1,
+ "_dbus_connection_putback_message_link_unlocked");
}
/**
DBUS_BEGIN_DECLS
+#ifdef DBUS_ENABLE_VERBOSE_MODE
+void _dbus_message_trace_ref (DBusMessage *message,
+ int old_refcount,
+ int new_refcount,
+ const char *why);
+#else
+/* this bypasses any "unused" warnings for the old and new refcount */
+#define _dbus_message_trace_ref(m, o, n, w) \
+ do \
+ {\
+ (void) (o); \
+ (void) (n); \
+ } while (0)
+#endif
+
typedef struct DBusMessageLoader DBusMessageLoader;
void _dbus_message_get_network_data (DBusMessage *message,
# define _dbus_enable_message_cache() (TRUE)
#endif
+#ifndef _dbus_message_trace_ref
+void
+_dbus_message_trace_ref (DBusMessage *message,
+ int old_refcount,
+ int new_refcount,
+ const char *why)
+{
+ static int enabled = -1;
+
+ _dbus_trace_ref ("DBusMessage", message, old_refcount, new_refcount, why,
+ "DBUS_MESSAGE_TRACE", &enabled);
+}
+#endif
+
/* Not thread locked, but strictly const/read-only so should be OK
*/
/** An static string representing an empty signature */
_dbus_atomic_inc (&message->refcount);
+ _dbus_message_trace_ref (message, 0, 1, "new_empty_header");
+
message->locked = FALSE;
#ifndef DBUS_DISABLE_CHECKS
message->in_cache = FALSE;
#endif
+ _dbus_message_trace_ref (retval, 0, 1, "copy");
return retval;
failed_copy:
DBusMessage *
dbus_message_ref (DBusMessage *message)
{
-#ifndef DBUS_DISABLE_ASSERT
dbus_int32_t old_refcount;
-#endif
_dbus_return_val_if_fail (message != NULL, NULL);
_dbus_return_val_if_fail (message->generation == _dbus_current_generation, NULL);
_dbus_return_val_if_fail (!message->in_cache, NULL);
-#ifdef DBUS_DISABLE_ASSERT
- _dbus_atomic_inc (&message->refcount);
-#else
old_refcount = _dbus_atomic_inc (&message->refcount);
_dbus_assert (old_refcount >= 1);
-#endif
+ _dbus_message_trace_ref (message, old_refcount, old_refcount + 1, "ref");
return message;
}
_dbus_assert (old_refcount >= 1);
+ _dbus_message_trace_ref (message, old_refcount, old_refcount - 1, "unref");
+
if (old_refcount == 1)
{
/* Calls application callbacks! */
#include <config.h>
#include "dbus-internals.h"
#include "dbus-connection-internal.h"
+#include "dbus-message-internal.h"
#include "dbus-pending-call-internal.h"
#include "dbus-pending-call.h"
#include "dbus-list.h"
pending->reply = NULL;
CONNECTION_UNLOCK (pending->connection);
-
+
+ _dbus_message_trace_ref (message, -1, -1, "dbus_pending_call_steal_reply");
return message;
}