diff --git a/common/memleak.c b/common/memleak.c index 68fe64f74..8f0332480 100644 --- a/common/memleak.c +++ b/common/memleak.c @@ -267,21 +267,25 @@ static void call_memleak_helpers(struct htable *memtable, const tal_t *p) for (i = tal_first(p); i; i = tal_next(i)) { const char *name = tal_name(i); - if (name && strends(name, "struct memleak_helper")) { - const struct memleak_helper *mh = i; - mh->cb(memtable, p); - } else if (name && strends(name, " **NOTLEAK**")) { - pointer_referenced(memtable, i); - memleak_remove_region(memtable, i, tal_bytelen(i)); - } else if (name && strends(name, " **NOTLEAK_IGNORE_CHILDREN**")) { - remove_with_children(memtable, i); - memleak_remove_region(memtable, i, tal_bytelen(i)); - } else if (name && strends(name, "_notleak")) { - pointer_referenced(memtable, i); - call_memleak_helpers(memtable, i); - } else { - call_memleak_helpers(memtable, i); + if (name) { + if (strends(name, "struct memleak_helper")) { + const struct memleak_helper *mh = i; + mh->cb(memtable, p); + } else if (strends(name, " **NOTLEAK**") + || strends(name, "_notleak")) { + pointer_referenced(memtable, i); + memleak_remove_region(memtable, i, + tal_bytelen(i)); + } else if (strends(name, + " **NOTLEAK_IGNORE_CHILDREN**")) { + remove_with_children(memtable, i); + memleak_remove_region(memtable, i, + tal_bytelen(i)); + } } + + /* Recurse down looking for "notleak" children */ + call_memleak_helpers(memtable, i); } }