Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Nov 2010 10:10:11 GMT
From:      Jaakko Heinonen <jh@FreeBSD.org>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: misc/151861: dlclose() of library causes separately opened libraries to unload as well
Message-ID:  <201011031010.oA3AABhl012849@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/151861; it has been noted by GNATS.

From: Jaakko Heinonen <jh@FreeBSD.org>
To: Kostik Belousov <kostikbel@gmail.com>
Cc: Arjan van Leeuwen <freebsd-maintainer@opera.com>,
	bug-followup@freebsd.org, kan@freebsd.org
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011031010.oA3AABhl012849>