This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Fix BFD leak in solib-darwin.c


On 2/22/19 8:36 AM, Tom Tromey wrote:
> commit 192b62ce0b4bb5c61188f570e127a26d2c32f716 ("Use class to manage
> BFD reference counts") changed darwin_get_dyld_bfd to use:
> 
> +	dyld_bfd.release ();
> 
> rather than
> 
> -      do_cleanups (cleanup);
> 
> However, using release here leaks the BFD.  Instead I believe reset
> should be used instead.
> 
> I can't readily test this, so please take a look and let me know what
> you think.
> 
> gdb/ChangeLog
> 2019-02-22  Tom Tromey  <tromey@adacore.com>
> 
> 	* solib-darwin.c (darwin_get_dyld_bfd): Use reset, not release.
> ---
>  gdb/ChangeLog      | 4 ++++
>  gdb/solib-darwin.c | 2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c
> index d3060604bad..da410ad4660 100644
> --- a/gdb/solib-darwin.c
> +++ b/gdb/solib-darwin.c
> @@ -455,7 +455,7 @@ darwin_get_dyld_bfd ()
>        if (sub != NULL)
>  	dyld_bfd = sub;
>        else
> -	dyld_bfd.release ();
> +	dyld_bfd.reset (nullptr);
>      }
>    return dyld_bfd;
>  }

I haven't tested, but this LGTM.  Simon has noticed several instances of
this bug where release() was used instead of reset().  (The most recent one
was in the build-id separate debug file code that I think hasn't been
committed yet.)  It might be worth doing a quick sweep of current 'release'
calls (if there aren't too many) to check for other leaks.

-- 
John Baldwin

                                                                            


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]