diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-12-27 07:38:25 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-12-27 07:38:25 +0000 |
commit | cb5b9388dad6d0524322d45eafaa7b5d7b00b554 (patch) | |
tree | d1c543bdfe5bcaa0fb71816104857a9bcbead484 /nptl/sysdeps/unix/sysv/linux/raise.c | |
parent | dc8527f6475c8dd3682fd9203e91a01c77443463 (diff) | |
download | glibc-cb5b9388dad6d0524322d45eafaa7b5d7b00b554.tar glibc-cb5b9388dad6d0524322d45eafaa7b5d7b00b554.tar.gz glibc-cb5b9388dad6d0524322d45eafaa7b5d7b00b554.tar.bz2 glibc-cb5b9388dad6d0524322d45eafaa7b5d7b00b554.zip |
Update.
2003-12-23 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/raise.c (raise): Protect pid = selftid
setting with __ASSUME_TGKILL || defined __NR_tgkill.
If pid is 0, set it to selftid.
* sysdeps/unix/sysv/linux/getpid.c (really_getpid): Make inline.
Don't set self->pid but self->tid. If self->pid == 0 and self->tid
!= 0, return self->tid without doing a syscall.
* descr.h (struct pthread): Move pid field after tid.
* Makefile (tests): Add tst-raise1.
* tst-raise1.c: New file.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/raise.c')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/raise.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/raise.c b/nptl/sysdeps/unix/sysv/linux/raise.c index 268ba87b29..ac54fa217e 100644 --- a/nptl/sysdeps/unix/sysv/linux/raise.c +++ b/nptl/sysdeps/unix/sysv/linux/raise.c @@ -44,17 +44,19 @@ raise (sig) #endif THREAD_SETMEM (pd, tid, selftid); +#if __ASSUME_TGKILL || defined __NR_tgkill /* We do not set the PID field in the TID here since we might be called from a signal handler while the thread executes fork. */ pid = selftid; +#endif } #if __ASSUME_TGKILL || defined __NR_tgkill else /* raise is an async-safe function. It could be called while the fork function temporarily invalidated the PID field. Adjust for that. */ - if (__builtin_expect (pid < 0, 0)) - pid = -pid; + if (__builtin_expect (pid <= 0, 0)) + pid = pid == 0 ? selftid : -pid; #endif #if __ASSUME_TGKILL |