aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2019-07-29 17:02:48 +0100
committerNick Alcock <nick.alcock@oracle.com>2019-09-23 14:12:54 +0100
commitbf05b84eda6ea5e903ed19fad4e509eca43a7267 (patch)
tree236e0f2df8302b33392eec6ada6b423fbf54fad3
parentfba72c8c05c56493fc78a4328b4969b9f136ee0c (diff)
downloadgdb-bf05b84eda6ea5e903ed19fad4e509eca43a7267.zip
gdb-bf05b84eda6ea5e903ed19fad4e509eca43a7267.tar.gz
gdb-bf05b84eda6ea5e903ed19fad4e509eca43a7267.tar.bz2
libctf: actually close bfds we have opened
When we do a ctf_fdopen, we open things via bfd_fdopenr and set up a hook to close the bfd again... but then we never actually call that hook from anywhere, so we eventually leak every bfd we open. Fix this by calling the hook (if set) in ctf_arc_close. New in v3. libctf/ * ctf-archive.c (ctf_arc_close): Call ctfi_bfd_close if set. * ctf-open-bfd.c (ctf_bfdclose): Fix comment.
-rw-r--r--libctf/ChangeLog5
-rw-r--r--libctf/ctf-archive.c2
-rw-r--r--libctf/ctf-open-bfd.c2
3 files changed, 8 insertions, 1 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog
index 335cdc5..6d2005b 100644
--- a/libctf/ChangeLog
+++ b/libctf/ChangeLog
@@ -1,5 +1,10 @@
2019-07-30 Nick Alcock <nick.alcock@oracle.com>
+ * ctf-archive.c (ctf_arc_close): Call ctfi_bfd_close if set.
+ * ctf-open-bfd.c (ctf_bfdclose): Fix comment.
+
+2019-07-30 Nick Alcock <nick.alcock@oracle.com>
+
* ctf-open-bfd.c (ctf_fdopen): Call bfd_set_cacheable.
2019-07-13 Nick Alcock <nick.alcock@oracle.com>
diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c
index 8de11d6..979641c 100644
--- a/libctf/ctf-archive.c
+++ b/libctf/ctf-archive.c
@@ -436,6 +436,8 @@ ctf_arc_close (ctf_archive_t *arc)
free ((void *) arc->ctfi_symsect.cts_data);
/* Do not free the ctfi_strsect: it is bound to the bfd. */
free (arc->ctfi_data);
+ if (arc->ctfi_bfd_close)
+ arc->ctfi_bfd_close (arc);
free (arc);
}
diff --git a/libctf/ctf-open-bfd.c b/libctf/ctf-open-bfd.c
index da62463..d50bd0b 100644
--- a/libctf/ctf-open-bfd.c
+++ b/libctf/ctf-open-bfd.c
@@ -66,7 +66,7 @@ ctf_new_archive_internal (int is_archive, struct ctf_archive *arc,
return arci;
}
-/* Free the BFD bits of a CTF file on ctf_file_close(). */
+/* Free the BFD bits of a CTF file on ctf_arc_close(). */
static void
ctf_bfdclose (struct ctf_archive_internal *arci)