aboutsummaryrefslogtreecommitdiff
path: root/nptl/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-12-11 04:52:17 +0000
committerUlrich Drepper <drepper@redhat.com>2003-12-11 04:52:17 +0000
commit1d9d0b80d1412f8a272e0881d34538a041e56b4b (patch)
tree0e353d8e5e13eba2a29c2538862592c6febf00fa /nptl/sysdeps
parentc776b3d717593ee3fdd2120f80217f0abe0dec74 (diff)
downloadglibc-1d9d0b80d1412f8a272e0881d34538a041e56b4b.zip
glibc-1d9d0b80d1412f8a272e0881d34538a041e56b4b.tar.gz
glibc-1d9d0b80d1412f8a272e0881d34538a041e56b4b.tar.bz2
Update.
2003-12-10 Ulrich Drepper <drepper@redhat.com> * sysdeps/pthread/bits/libc-lock.h (__rtld_lock_initialize): Define. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Call __rtld_lock_initialize for ld.so lock. Patch in part by Adam Li <adam.li@intel.com>.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r--nptl/sysdeps/pthread/bits/libc-lock.h3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/fork.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/nptl/sysdeps/pthread/bits/libc-lock.h b/nptl/sysdeps/pthread/bits/libc-lock.h
index 327e383..0adf273 100644
--- a/nptl/sysdeps/pthread/bits/libc-lock.h
+++ b/nptl/sysdeps/pthread/bits/libc-lock.h
@@ -131,6 +131,9 @@ typedef pthread_key_t __libc_key_t;
#define _RTLD_LOCK_RECURSIVE_INITIALIZER \
{PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}
+#define __rtld_lock_initialize(NAME) \
+ (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER)
+
/* If we check for a weakly referenced symbol and then perform a
normal jump to it te code generated for some platforms in case of
PIC is unnecessarily slow. What would happen is that the function
diff --git a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c
index 43e1b43..84bf379 100644
--- a/nptl/sysdeps/unix/sysv/linux/fork.c
+++ b/nptl/sysdeps/unix/sysv/linux/fork.c
@@ -151,6 +151,9 @@ __libc_fork (void)
/* Reset locks in the I/O code. */
_IO_list_resetlock ();
+ /* Reset the lock the dynamic loader uses to protect its data. */
+ __rtld_lock_initialize (GL(dl_load_lock));
+
/* Run the handlers registered for the child. */
while (allp != NULL)
{