The following reply was made to PR misc/151861; it has been noted by GNATS.

From: Jaakko Heinonen <[email protected]>
To: Kostik Belousov <[email protected]>
Cc: Arjan van Leeuwen <[email protected]>,
        [email protected], [email protected]
Subject: Re: misc/151861: dlclose() of library causes separately opened
 libraries to unload as well
Date: Wed, 3 Nov 2010 17:02:24 +0200

 On 2010-11-03, Kostik Belousov wrote:
 > > Why init_dag() should be allowed to be called multiple times for an
 > > object?
 > 
 > If already loaded object is dlopened, dlclosed, and then again dlopened,
 > init_dag() will be called twice, one time for each dlopen.
 
 If the object gets unloaded after dlclose(), this will not happen? I am
 not sure if I like that it can be called multiple times.
 
 > --- a/libexec/rtld-elf/rtld.c
 > +++ b/libexec/rtld-elf/rtld.c
 > @@ -1275,11 +1275,12 @@ init_dag(Obj_Entry *root)
 >  {
 >      DoneList donelist;
 >  
 > -    if (root->dag_inited)
 > -        return;
 > -    donelist_init(&donelist);
 > -    init_dag1(root, root, &donelist);
 > -    root->dag_inited = true;
 > +    if (!root->dag_inited) {
 > +    donelist_init(&donelist);
 > +    init_dag1(root, root, &donelist);
 > +    root->dag_inited = true;
 > +    }
 > +    ref_dag(root);
 >  }
 
 If you are going to take this approach, why not remove init_dag() altogether
 and make ref_dag() to initialize the dag when necessary?
 
 Thanks for working on this.
 -- 
 Jaakko
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to