diff options
author | Havoc Pennington <hp@redhat.com> | 2005-01-30 07:44:08 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2005-01-30 07:44:08 +0000 |
commit | 98ad8a8ec6626f7f5c78915b6bdf2be688b4839f (patch) | |
tree | fb2744289e2f187aa7239d11bf8473fd186fa1ce /dbus/dbus-message.c | |
parent | 41f52c96d651003b3d0a266a582d401228a8368e (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.c | 14 |
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); |