diff options
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r-- | nptl/sysdeps/pthread/createthread.c | 20 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/internaltypes.h | 4 |
2 files changed, 22 insertions, 2 deletions
diff --git a/nptl/sysdeps/pthread/createthread.c b/nptl/sysdeps/pthread/createthread.c index c4695fced3..58a7b637a1 100644 --- a/nptl/sysdeps/pthread/createthread.c +++ b/nptl/sysdeps/pthread/createthread.c @@ -93,11 +93,24 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr, send it the cancellation signal. */ INTERNAL_SYSCALL_DECL (err2); err_out: +#if __ASSUME_TGKILL + (void) INTERNAL_SYSCALL (tgkill, err2, 3, + THREAD_GETMEM (THREAD_SELF, pid), + pd->tid, SIGCANCEL); + +# ifdef __ASSUME_CLONE_STOPPED + /* Then wake it up so that the signal can be processed. */ + (void) INTERNAL_SYSCALL (tgkill, err2, 3, + THREAD_GETMEM (THREAD_SELF, pid), + pd->tid, SIGCONT); +# endif +#else (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCANCEL); -#ifdef __ASSUME_CLONE_STOPPED +# ifdef __ASSUME_CLONE_STOPPED /* Then wake it up so that the signal can be processed. */ (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCONT); +# endif #endif return INTERNAL_SYSCALL_ERRNO (res, err); @@ -116,7 +129,12 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr, #ifdef __ASSUME_CLONE_STOPPED /* Now start the thread for real. */ +# if __ASSUME_TGKILL + res = INTERNAL_SYSCALL (tgkill, err, 3, THREAD_GETMEM (THREAD_SELF, pid), + pd->tid, SIGCONT); +# else res = INTERNAL_SYSCALL (tkill, err, 2, pd->tid, SIGCONT); +# endif /* If something went wrong, kill the thread. */ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (res, err), 0)) diff --git a/nptl/sysdeps/unix/sysv/linux/internaltypes.h b/nptl/sysdeps/unix/sysv/linux/internaltypes.h index 39afb32aac..10d0d95518 100644 --- a/nptl/sysdeps/unix/sysv/linux/internaltypes.h +++ b/nptl/sysdeps/unix/sysv/linux/internaltypes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -48,6 +48,8 @@ struct pthread_attr #define ATTR_FLAG_SCOPEPROCESS 0x0004 #define ATTR_FLAG_STACKADDR 0x0008 #define ATTR_FLAG_OLDATTR 0x0010 +#define ATTR_FLAG_SCHED_SET 0x0020 +#define ATTR_FLAG_POLICY_SET 0x0040 /* Mutex attribute data structure. */ |