libdw: Make sure Ebl is always freed from cfi frame cache.
authorMark Wielaard <mjw@redhat.com>
Thu, 19 Nov 2015 11:37:08 +0000 (12:37 +0100)
committerMark Wielaard <mjw@redhat.com>
Fri, 27 Nov 2015 13:41:51 +0000 (14:41 +0100)
commite2cf85cd35d33f92ff3d032e941783238a8fdaa1
tree2fc8359d80c6bc74e1d27f19af08325a60017650
parentb47fb2366f2ac3015d7cf9ae3938392196609831
libdw: Make sure Ebl is always freed from cfi frame cache.

libdwfl sets the Dwfl_Module Ebl for the eh_cfi and dwarf_cfi cache to
save a bit of memory. It also calls ebl_closebackend on the ebl to free
it. The Dwarf_CFI never frees the Ebl in the cache, even when it opened
one itself. This means that if only libdw calls are used to access the
Dwarf_CFI the Ebl might be leaked.

Always destroy the Dwarf_CFI cache Ebl in __libdw_destroy_frame_cache.
And in __libdwfl_module_free clear the Dwarf_CFI Ebl if it is the
Dwfl_Module Ebl before calling dwarf_cfi_end and dwarf_end.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
libdw/ChangeLog
libdw/frame-cache.c
libdwfl/ChangeLog
libdwfl/dwfl_module.c