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]"
