diff options
author | Roland McGrath <roland@gnu.org> | 2003-03-12 10:30:26 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2003-03-12 10:30:26 +0000 |
commit | 0bb2ac85a6abdb035b9fb5daa66b6f8df1957e8b (patch) | |
tree | 480bb5994b14a4e5b20001d4bd208112183c010d /nptl/sysdeps/unix/sysv/linux/fork.c | |
parent | 326132dbdba5be889b8f97430779ea15c9b90ce1 (diff) | |
download | glibc-0bb2ac85a6abdb035b9fb5daa66b6f8df1957e8b.tar glibc-0bb2ac85a6abdb035b9fb5daa66b6f8df1957e8b.tar.gz glibc-0bb2ac85a6abdb035b9fb5daa66b6f8df1957e8b.tar.bz2 glibc-0bb2ac85a6abdb035b9fb5daa66b6f8df1957e8b.zip |
* pthread-errnos.sym: New file.
* Makefile (gen-as-const-headers): New variable, list that file.
* sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include generated
header <pthread-errnos.h> instead of defining errno values here.
* sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S:
Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S:
Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_post.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sem_trywait.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sem_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sem_post.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sem_wait.S: Likewise.
* sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/sh/lowlevelmutex.S: Likewise.
* sysdeps/i386/i486/pthread_spin_trylock.S: Likewise.
* sysdeps/x86_64/pthread_spin_trylock.S: Likewise.
* sysdeps/sh/pthread_spin_trylock.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise.
* sysdeps/unix/sysv/linux/fork.c: Add an assert to check that
CLONE_CHILD_SETTID worked.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/fork.c')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/fork.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c index eba28064ea..e75f9d51da 100644 --- a/nptl/sysdeps/unix/sysv/linux/fork.c +++ b/nptl/sysdeps/unix/sysv/linux/fork.c @@ -25,6 +25,7 @@ #include <tls.h> #include "fork.h" #include <bits/stdio-lock.h> +#include <assert.h> unsigned long int *__fork_generation_pointer; @@ -68,6 +69,8 @@ __libc_fork (void) _IO_list_lock (); + pid_t ppid = THREAD_GETMEM (THREAD_SELF, tid); + #ifdef ARCH_FORK pid = ARCH_FORK (); #else @@ -75,8 +78,11 @@ __libc_fork (void) pid = INLINE_SYSCALL (fork, 0); #endif + if (pid == 0) { + assert (THREAD_GETMEM (THREAD_SELF, tid) != ppid); + if (__fork_generation_pointer != NULL) *__fork_generation_pointer += 4; @@ -101,6 +107,8 @@ __libc_fork (void) } else { + assert (THREAD_GETMEM (THREAD_SELF, tid) == ppid); + /* We execute this even if the 'fork' call failed. */ _IO_list_unlock (); |