From owner-cvs-all Mon Dec 27 20:38:20 1999 Delivered-To: cvs-all@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 20592153A7; Mon, 27 Dec 1999 20:38:18 -0800 (PST) (envelope-from jdp@FreeBSD.org) Received: (from jdp@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id UAA89079; Mon, 27 Dec 1999 20:38:18 -0800 (PST) (envelope-from jdp@FreeBSD.org) Message-Id: <199912280438.UAA89079@freefall.freebsd.org> From: John Polstra Date: Mon, 27 Dec 1999 20:38:17 -0800 (PST) To: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/include dlfcn.h src/lib/libc/gen dllockinit.3 src/libexec/rtld-elf lockdflt.c Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk jdp 1999/12/27 20:38:17 PST Modified files: include dlfcn.h lib/libc/gen dllockinit.3 libexec/rtld-elf lockdflt.c Log: 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. Revision Changes Path 1.8 +2 -1 src/include/dlfcn.h 1.2 +5 -1 src/lib/libc/gen/dllockinit.3 1.2 +9 -5 src/libexec/rtld-elf/lockdflt.c To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message