summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>1999-12-28 04:38:17 +0000
committerjdp <jdp@FreeBSD.org>1999-12-28 04:38:17 +0000
commit363b7bd53715dfc3c4b8bc6809fed0a241c34a9a (patch)
tree69b2660c2be6f033a411c7b6f07eb8728f078b9d /lib
parentc96f8e891fe73a35ab2082f6403dd88a66ac0222 (diff)
downloadFreeBSD-src-363b7bd53715dfc3c4b8bc6809fed0a241c34a9a.zip
FreeBSD-src-363b7bd53715dfc3c4b8bc6809fed0a241c34a9a.tar.gz
Work around an assert failure in the dynamic linker's default thread
locking functions. If an application loads a shared object with dlopen() and the shared object has an init function which requires lazy binding, then _rtld_bind is called when the thread is already inside the dynamic linker. This leads to a recursive acquisition of the lock, which I was not expecting -- hence the assert failure. This work-around makes the default locking functions handle recursive locking. It is NOT the correct fix -- that should be implemented at the generic locking level rather than in the default locking functions. I will implement the correct fix in a future commit. Since the dllockinit() interface will likely need to change, warn about that in both the man page and the header file.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/dllockinit.34
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/libc/gen/dllockinit.3 b/lib/libc/gen/dllockinit.3
index facb18b..7bc32b3 100644
--- a/lib/libc/gen/dllockinit.3
+++ b/lib/libc/gen/dllockinit.3
@@ -39,6 +39,10 @@
"void (*lock_release)(void *lock)" "void (*lock_destroy)(void *lock)" \
"void (*context_destroy)(void *context)"
.Sh DESCRIPTION
+.Bf Sy
+This interface is subject to change and should not be used yet.
+.Ef
+.Pp
Threads packages can call
.Nm
at initialization time to register locking functions for the dynamic
OpenPOWER on IntegriCloud