[PATCH] ldso: fix dlsym hang when reloading DSOs
Rich Felker
dalias at aerifal.cx
Thu Jun 27 19:01:25 UTC 2013
On Thu, Jun 27, 2013 at 09:36:14PM +0300, Timo Teras wrote:
> On Thu, 27 Jun 2013 14:16:26 -0400
> Rich Felker <dalias at aerifal.cx> wrote:
>
> > On Thu, Jun 27, 2013 at 09:34:32AM +0300, Timo Teräs wrote:
> > > It can happen under certain cases that the DSO had refcount 0,
> > > but was already loaded. (NODELETE flag is set, or it is pulled
> > > in via both NEEDED dependency and explicit dlopen()).
> >
> > Wouldn't it be more logical to prevent this from happening by not
> > using a refcount of zero? For example, NODELETE could just perform an
> > extra increment on the refcnt so that it never reaches 0. In essence,
> > the NODELETE flag is a permanent reference to the DSO.
>
> It seems this is not the only case. As mentioned, NEEDED dependencies
> together with dlopen()/dlclose() can result in this too in some cases.
> Apparently usage_count refers to active handles from dlopen() - and can
> be zero if the lib is pulled in via NEEDED dependency only.
This is also a bug in the reference counting. DT_NEEDED and dlopen
should both be considered references for counting purposes. Otherwise
you can end up with a reference count of zero when the library is
still in use.
Rich
More information about the uClibc
mailing list