Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Apr 2003 16:10:36 +0300 (EEST)
From:      Narvi <narvi@haldjas.folklore.ee>
To:        Peter Wemm <peter@wemm.org>
Cc:        Daniel Eischen <eischen@pcnet1.pcnet.com>
Subject:   Re: Question about rtld-elf. Anyone?.. Anyone? 
Message-ID:  <20030429145307.L40030-100000@haldjas.folklore.ee>
In-Reply-To: <20030429041716.A14182A7EA@canning.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help

[snip]

> ...
> This is a short-term fix for a larger problem.  The use of spinlocking
> isn't guaranteed to work in all cases.  For example, if the spinning
> thread has higher priority than all other threads, it may never be
> pre-empted, and the thread holding the lock may never progress far
> enough to release the lock.  On the other hand, spinlocking is the
> only locking that can work with an arbitrary unknown threads package.
>
> I have some ideas for a much better fix in the longer term.  It
> would eliminate all locking inside the dynamic linker by making it
> safe for symbol lookups and lazy binding to proceed in parallel
> with a call to dlopen or dlclose.  This means that the only mutual
> exclusion needed would be to prevent multiple simultaneous calls
> to dlopen and/or dlclose.  That mutual exclusion could be put into
> the native pthreads library.  Applications using foreign threads
> packages would have to make their own arrangements to ensure that
> they did not have multiple threads in dlopen and/or dlclose -- a
> reasonable requirement in my opinion.
> ====
>
> Basically he's describing the exact scenario you're concerned about.  The
> last paragraph suggests a better way.
>

You will then need to make sure something sensible (and not a deadlock)
happens if fork() gets called at a time when dlopen() / dlclose() is
running in another thread.

> Cheers,
> -Peter
> --
> Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
> "All of this is for nothing if we don't go to the stars" - JMS/B5
>



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