| 356 | } |
| 357 | |
| 358 | bool dump_memleak(struct htable *memtable, |
| 359 | void PRINTF_FMT(1,2) (*print)(const char *fmt, ...)) |
| 360 | { |
| 361 | const tal_t *i; |
| 362 | const uintptr_t *backtrace; |
| 363 | bool found_leak = false; |
| 364 | |
| 365 | while ((i = memleak_get(memtable, &backtrace)) != NULL) { |
| 366 | print("MEMLEAK: %p", i); |
| 367 | if (tal_name(i)) |
| 368 | print(" label=%s", tal_name(i)); |
| 369 | |
| 370 | dump_leak_backtrace(backtrace, print); |
| 371 | print(" parents:"); |
| 372 | for (tal_t *p = tal_parent(i); p; p = tal_parent(p)) { |
| 373 | print(" %s", tal_name(p)); |
| 374 | p = tal_parent(p); |
| 375 | } |
| 376 | found_leak = true; |
| 377 | } |
| 378 | |
| 379 | return found_leak; |
| 380 | } |
| 381 | #else /* !DEVELOPER */ |
| 382 | void *notleak_(void *ptr, bool plus_children UNNEEDED) |
| 383 | { |
no test coverage detected