Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 01/10] change gdb to refcount bfd everywhere
Date: Mon, 23 Jul 2012 18:54:00 -0000	[thread overview]
Message-ID: <877gtuqpfo.fsf@fleche.redhat.com> (raw)
In-Reply-To: <20120723085355.GA29593@host2.jankratochvil.net> (Jan	Kratochvil's message of "Mon, 23 Jul 2012 10:53:55 +0200")

Tom> This changes allocate_objfile to acquire a reference to the BFD,
Tom> rather than steal a reference.  Then it changes all callers, direct or
Tom> indirect, to follow.

Jan> map_vmap still steals a reference.

Here's what I am checking in for this.

I think I have addressed all your comments now.
Thanks for the reviews.

Tom

2012-07-23  Tom Tromey  <tromey@redhat.com>

	* rs6000-nat.c (add_vmap): Rewrite archive loop.  Fix reference
	counting.
	* exec.c (exec_close_1): Unconditionally release vmap's BFD.
	(map_vmap): Acquire a reference to the BFD.

diff --git a/gdb/exec.c b/gdb/exec.c
index 9b95e02..e076609 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -127,16 +127,13 @@ exec_close_1 (int quitting)
       vp = nxt;
       nxt = vp->nxt;
 
-      /* if there is an objfile associated with this bfd,
-         free_objfile() will do proper cleanup of objfile *and* bfd.  */
-
       if (vp->objfile)
 	{
 	  free_objfile (vp->objfile);
 	  need_symtab_cleanup = 1;
 	}
-      else if (vp->bfd != exec_bfd)
-	gdb_bfd_unref (vp->bfd);
+
+      gdb_bfd_unref (vp->bfd);
 
       xfree (vp);
     }
@@ -548,6 +545,7 @@ map_vmap (bfd *abfd, bfd *arch)
   memset ((char *) vp, '\0', sizeof (*vp));
   vp->nxt = 0;
   vp->bfd = abfd;
+  gdb_bfd_ref (abfd);
   vp->name = bfd_get_filename (arch ? arch : abfd);
   vp->member = arch ? bfd_get_filename (abfd) : "";
 
diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c
index 8c3f546..9b8efd3 100644
--- a/gdb/rs6000-nat.c
+++ b/gdb/rs6000-nat.c
@@ -765,12 +765,16 @@ add_vmap (LdInfo *ldi)
 
   else if (bfd_check_format (abfd, bfd_archive))
     {
-      last = 0;
-      /* FIXME??? am I tossing BFDs?  bfd?  */
-      while ((last = gdb_bfd_openr_next_archived_file (abfd, last)))
+      last = gdb_bfd_openr_next_archived_file (abfd, NULL);
+      while (last != NULL)
 	{
+	  bfd *next;
+
 	  if (strcmp (mem, last->filename) == 0)
 	    break;
+
+	  next = gdb_bfd_openr_next_archived_file (abfd, last);
+	  gdb_bfd_unref (last);
 	}
 
       if (!last)
@@ -790,6 +794,9 @@ add_vmap (LdInfo *ldi)
 	}
 
       vp = map_vmap (last, abfd);
+      /* map_vmap acquired a reference to LAST, so we can release
+	 ours.  */
+      gdb_bfd_unref (last);
     }
   else
     {
@@ -804,6 +811,11 @@ add_vmap (LdInfo *ldi)
   /* Always add symbols for the main objfile.  */
   if (vp == vmap || auto_solib_add)
     vmap_add_symbols (vp);
+
+  /* Anything needing a reference to ABFD has already acquired it, so
+     release our local reference.  */
+  gdb_bfd_unref (abfd);
+
   return vp;
 }
 \f


  parent reply	other threads:[~2012-07-23 18:54 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-18 19:32 Tom Tromey
2012-07-19 14:18 ` Jan Kratochvil
2012-07-19 20:58   ` Tom Tromey
2012-07-20 16:37     ` Tom Tromey
2012-07-23  8:54       ` Jan Kratochvil
2012-07-23  9:06         ` Jan Kratochvil
2012-07-23 15:23           ` Tom Tromey
2012-07-23 15:25             ` Tom Tromey
2012-07-24 13:17             ` Jan Kratochvil
2012-07-24 19:52               ` Tom Tromey
2012-07-24 20:27                 ` Eli Zaretskii
2012-07-25 14:25                   ` Tom Tromey
2012-07-25 14:29                     ` Jan Kratochvil
2012-07-25 14:52                       ` Tom Tromey
2012-07-25 14:55                         ` Jan Kratochvil
2012-07-25 15:44                           ` Tom Tromey
2012-07-25 15:37                     ` Eli Zaretskii
2012-07-25 11:57                 ` Jan Kratochvil
2012-07-23 14:52         ` Tom Tromey
2012-07-23 18:54         ` Tom Tromey [this message]
2012-07-23 19:02           ` Jan Kratochvil
2012-07-23 19:08             ` Tom Tromey
2012-07-20 16:37     ` Tom Tromey
2012-07-20 18:11       ` Jan Kratochvil
2012-07-22 19:00     ` Jan Kratochvil
2012-07-23 14:49       ` Tom Tromey
2012-07-23 15:01         ` Tom Tromey
2012-07-23 15:03         ` Tom Tromey
2012-07-20 16:31   ` Tom Tromey
2012-07-20 18:10     ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877gtuqpfo.fsf@fleche.redhat.com \
    --to=tromey@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox