]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
libctf: actually close bfds we have opened
authorNick Alcock <nick.alcock@oracle.com>
Mon, 29 Jul 2019 16:02:48 +0000 (17:02 +0100)
committerNick Alcock <nick.alcock@oracle.com>
Mon, 23 Sep 2019 13:12:54 +0000 (14:12 +0100)
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.

libctf/ChangeLog
libctf/ctf-archive.c
libctf/ctf-open-bfd.c

index 335cdc58f4b840ec956f1ce41c4cc215280a5233..6d2005b488e917b7eda49d422cae7ca9581fc165 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 8de11d6d583e8a892623b8d125d31b30d563429a..979641cc1e728b76ee0956fa7fd5f9514389905f 100644 (file)
@@ -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);
 }
 
index da62463c35fea62d873585519e76e17cc12e751f..d50bd0b1ae28c0730f06347ded4f6f3060d082f1 100644 (file)
@@ -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)