summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-message.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2005-01-30 07:44:08 +0000
committerHavoc Pennington <hp@redhat.com>2005-01-30 07:44:08 +0000
commit98ad8a8ec6626f7f5c78915b6bdf2be688b4839f (patch)
treefb2744289e2f187aa7239d11bf8473fd186fa1ce /dbus/dbus-message.c
parent41f52c96d651003b3d0a266a582d401228a8368e (diff)
2005-01-30 Havoc Pennington <hp@redhat.com>
* glib/dbus-gobject.c (introspect_properties): fix the XML generated * dbus/dbus-message.c (dbus_message_unref): add an in_cache flag which effectively detects the use of freed messages * glib/dbus-gobject.c (handle_introspect): modify and return the reply message instead of the incoming message * dbus/dbus-object-tree.c (handle_default_introspect_unlocked): gee, maybe it should SEND THE XML instead of just making a string and freeing it again ;-) * tools/dbus-print-message.c (print_message): improve printing of messages * configure.in: add debug-glib.service to the output
Diffstat (limited to 'dbus/dbus-message.c')
-rw-r--r--dbus/dbus-message.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c
index 85252005..0d816595 100644
--- a/dbus/dbus-message.c
+++ b/dbus/dbus-message.c
@@ -456,6 +456,8 @@ dbus_message_finalize (DBusMessage *message)
_dbus_header_free (&message->header);
_dbus_string_free (&message->body);
+ _dbus_assert (message->refcount.value == 0);
+
dbus_free (message);
}
@@ -657,10 +659,15 @@ dbus_message_cache_or_finalize (DBusMessage *message)
message_cache[i] = message;
message_cache_count += 1;
was_cached = TRUE;
+#ifndef DBUS_DISABLE_CHECKS
+ message->in_cache = TRUE;
+#endif
out:
_DBUS_UNLOCK (message_cache);
+ _dbus_assert (message->refcount.value == 0);
+
if (!was_cached)
dbus_message_finalize (message);
}
@@ -691,6 +698,9 @@ dbus_message_new_empty_header (void)
message->refcount.value = 1;
message->byte_order = DBUS_COMPILER_BYTE_ORDER;
message->locked = FALSE;
+#ifndef DBUS_DISABLE_CHECKS
+ message->in_cache = FALSE;
+#endif
message->size_counters = NULL;
message->size_counter_delta = 0;
message->changed_stamp = 0;
@@ -1067,7 +1077,8 @@ dbus_message_ref (DBusMessage *message)
_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);
+
old_refcount = _dbus_atomic_inc (&message->refcount);
_dbus_assert (old_refcount >= 1);
@@ -1087,6 +1098,7 @@ dbus_message_unref (DBusMessage *message)
_dbus_return_if_fail (message != NULL);
_dbus_return_if_fail (message->generation == _dbus_current_generation);
+ _dbus_return_if_fail (!message->in_cache);
old_refcount = _dbus_atomic_dec (&message->refcount);