summaryrefslogtreecommitdiff
path: root/libctf
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-10-03 17:04:55 +0100
commitf046147d59aab0c8b6f00cd182f34b42ac8915e8 (patch)
treecfde61dd0d3715ea17ba5be78ea650677452c0a3 /libctf
parentedc8bbe90b82f1fa4f3f261b5c97503867e9aba4 (diff)
downloadbinutils-gdb-f046147d59aab0c8b6f00cd182f34b42ac8915e8.tar.gz
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.
Diffstat (limited to 'libctf')
-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 852ad6267c3..ff9e6e52d2e 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 8de11d6d583..979641cc1e7 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 1083c876085..d17b72d2f0d 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)