This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [patch] Fix dlclose / exit running in parallel resulting in dtor being called twice
- From: Florian Weimer <fweimer at redhat dot com>
- To: Paul Pluzhnikov <ppluzhnikov at google dot com>
- Cc: GLIBC Devel <libc-alpha at sourceware dot org>, "Carlos O'Donell" <carlos at redhat dot com>
- Date: Wed, 06 Feb 2019 16:22:29 +0100
- Subject: Re: [patch] Fix dlclose / exit running in parallel resulting in dtor being called twice
- References: <CALoOobMptbtaA-vfcyQuepxZrMzsPKPqTWMZbO=vwK9s0FoGhQ@mail.gmail.com> <8736p11cmz.fsf@oldenburg2.str.redhat.com> <CALoOobOT_Up8Tja8WF=hBDfxECMi1rOwT5JQ4Yw78L_UvMNVYA@mail.gmail.com>
* Paul Pluzhnikov:
> On Wed, Feb 6, 2019 at 1:37 AM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * Paul Pluzhnikov:
>>
>> > + /* Clear any errors. */
>> > + dlerror ();
>> > + return dso;
>> > +}
>>
>> Why did you add the dlerror call in the success case?
>
> I don't remember / can't recall.
>
> But it seems like it should always be a no-op. Do you have a case
> where dlopen() succeeds and dlerror() is not a no-op?
I think it may matter for dlsym, where you need to look dlerror to tell
if the symbol was NULL, or there was an actual error. But you would
have to clear dlerror *before* dlsym anyway, in case something else had
called dlsym without clearing the error.
Thanks,
Florian