summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/raise.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-12-27 07:38:25 +0000
committerUlrich Drepper <drepper@redhat.com>2003-12-27 07:38:25 +0000
commitcb5b9388dad6d0524322d45eafaa7b5d7b00b554 (patch)
treed1c543bdfe5bcaa0fb71816104857a9bcbead484 /nptl/sysdeps/unix/sysv/linux/raise.c
parentdc8527f6475c8dd3682fd9203e91a01c77443463 (diff)
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.c6
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