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 12:06:49 +0200 On 2010-11-02, Kostik Belousov wrote: > Why do you think that your patch is not correct ? Well, I didn't say that I think it's incorrect. :) > I feel that more explicit handling of the state of the DAG is cleaner. I don't disagree but there is a problem with your patch. If an object has the DF_1_NODELETE flag set, dag is initialized in load_needed_objects(). In this case the reference count isn't correctly bumped in dlopen() because dag_inited is already set. (BTW. I think that there shouldn't be the ref_dag(obj1) call in load_needed_objects(). Now the reference count is increased twice in the nodelete case.) > --- a/libexec/rtld-elf/rtld.c > +++ b/libexec/rtld-elf/rtld.c > @@ -1275,8 +1275,11 @@ init_dag(Obj_Entry *root) > { > DoneList donelist; > > + if (root->dag_inited) > + return; Why init_dag() should be allowed to be called multiple times for an object? Thanks. -- Jaakko _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "[email protected]"
