aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf/rtld_lock.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2008-11-27 11:27:59 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2008-11-27 11:27:59 +0000
commitcb5c4b10ba7c6d9f83b961c24be8f766ea6156c0 (patch)
treeb42b5149fd6de96214266e5ed4d6e0b09734ce83 /libexec/rtld-elf/rtld_lock.c
parent6974bd9e7543a0fc0afbc9de84f03ee27636b6f2 (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf/rtld_lock.c')
-rw-r--r--libexec/rtld-elf/rtld_lock.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/libexec/rtld-elf/rtld_lock.c b/libexec/rtld-elf/rtld_lock.c
index 5bb891a2ae82..bf4caf71176b 100644
--- a/libexec/rtld-elf/rtld_lock.c
+++ b/libexec/rtld-elf/rtld_lock.c
@@ -316,3 +316,19 @@ _rtld_thread_init(struct RtldLockInfo *pli)
thread_mask_set(flags);
dbg("_rtld_thread_init: done");
}
+
+void
+_rtld_atfork_pre(int *locks)
+{
+
+ locks[2] = wlock_acquire(rtld_phdr_lock);
+ locks[0] = rlock_acquire(rtld_bind_lock);
+}
+
+void
+_rtld_atfork_post(int *locks)
+{
+
+ rlock_release(rtld_bind_lock, locks[0]);
+ wlock_release(rtld_phdr_lock, locks[2]);
+}