/** Generate a backtrace for an object * * If this is the first entry being inserted */ int fr_backtrace_do(fr_bt_marker_t *marker) { fr_bt_info_t *bt; if (!fr_assert(marker->obj) || !fr_assert(marker->cbuff)) return -1; bt = talloc_zero(NULL, fr_bt_info_t); if (!bt) return -1; bt->obj = marker->obj; bt->count = backtrace(bt->frames, MAX_BT_FRAMES); fr_cbuff_rp_insert(marker->cbuff, bt); return 0; }
/** Generate a backtrace for an object during destruction * * If this is the first entry being inserted */ static int _fr_do_bt(fr_bt_marker_t *marker) { fr_bt_info_t *bt; if (!fr_assert(marker->obj) || !fr_assert(marker->cbuff)) { return -1; } bt = talloc_zero(marker->cbuff, fr_bt_info_t); if (!bt) { return -1; } bt->count = backtrace(bt->frames, MAX_BT_FRAMES); fr_cbuff_rp_insert(marker->cbuff, bt); return 0; }