summaryrefslogtreecommitdiffstats
path: root/dbus
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-16 21:01:57 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-16 21:01:57 +0000
commitd1f65c6c4f9dd9750f9ad3eda5b590a4ffca6498 (patch)
treea5e6728794bc55602755fc7fff1eb51613222ade /dbus
parentebb57e719c32becd95a1efe3dd269c21e5a011b6 (diff)
2003-03-16 Havoc Pennington <hp@pobox.com>
* 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
Diffstat (limited to 'dbus')
-rw-r--r--dbus/dbus-bus.c9
-rw-r--r--dbus/dbus-memory.c9
2 files changed, 16 insertions, 2 deletions
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;
}