From d1f65c6c4f9dd9750f9ad3eda5b590a4ffca6498 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 16 Mar 2003 21:01:57 +0000 Subject: 2003-03-16 Havoc Pennington * dbus/dbus-bus.c (ensure_bus_data): handle failure to set connection data * dbus/dbus-memory.c (_dbus_initialize_malloc_debug): support DBUS_MALLOC_BACKTRACES to print trace when failing an alloc --- dbus/dbus-bus.c | 9 +++++++-- dbus/dbus-memory.c | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'dbus') diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c index 84434888..8f7fb90e 100644 --- a/dbus/dbus-bus.c +++ b/dbus/dbus-bus.c @@ -146,8 +146,13 @@ ensure_bus_data (DBusConnection *connection) return NULL; } - dbus_connection_set_data (connection, bus_data_slot, bd, - bus_data_free); + if (!dbus_connection_set_data (connection, bus_data_slot, bd, + bus_data_free)) + { + bus_data_free (bd); + data_slot_unref (); + return NULL; + } /* Data slot refcount now held by the BusData */ } diff --git a/dbus/dbus-memory.c b/dbus/dbus-memory.c index f7c43f5c..26766c0c 100644 --- a/dbus/dbus-memory.c +++ b/dbus/dbus-memory.c @@ -80,6 +80,7 @@ static size_t fail_size = 0; static int fail_alloc_counter = _DBUS_INT_MAX; static dbus_bool_t guards = FALSE; static dbus_bool_t disable_mem_pools = FALSE; +static dbus_bool_t backtrace_on_fail_alloc = FALSE; /** value stored in guard padding for debugging buffer overrun */ #define GUARD_VALUE 0xdeadbeef @@ -126,6 +127,12 @@ _dbus_initialize_malloc_debug (void) disable_mem_pools = TRUE; _dbus_verbose ("Will disable memory pools\n"); } + + if (_dbus_getenv ("DBUS_MALLOC_BACKTRACES") != NULL) + { + backtrace_on_fail_alloc = TRUE; + _dbus_verbose ("Will backtrace on failing a malloc\n"); + } } } @@ -196,6 +203,8 @@ _dbus_decrement_fail_alloc_counter (void) fail_alloc_counter = _DBUS_INT_MAX; _dbus_verbose ("reset fail alloc counter to %d\n", fail_alloc_counter); + if (backtrace_on_fail_alloc) + _dbus_print_backtrace (); return TRUE; } -- cgit