diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-02-27 08:09:35 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-02-27 08:09:35 +0000 |
commit | 14ffbc8350791ff0f33ccc65af26ebaa1b520132 (patch) | |
tree | d1fa245e05ff0de18632a76b51c2570bafd18890 /nptl/sysdeps | |
parent | 261eada2ca65277dcc68565370cb2d321f402c21 (diff) | |
download | glibc-14ffbc8350791ff0f33ccc65af26ebaa1b520132.tar glibc-14ffbc8350791ff0f33ccc65af26ebaa1b520132.tar.gz glibc-14ffbc8350791ff0f33ccc65af26ebaa1b520132.tar.bz2 glibc-14ffbc8350791ff0f33ccc65af26ebaa1b520132.zip |
Update.
* pthread_attr_setschedparam.c: Don't test priority against limits
here. Set ATTR_FLAG_SCHED_SET flag.
* pthread_attr_setschedpolicy.c: Set ATTR_FLAG_POLICY_SET flag.
* pthread_create.c (__pthread_create_2_1): Copy scheduling attributes
from parent thread to child. If attribute is used and scheduling
parameters are not inherited, copy parameters from attribute or
compute them. Check priority value.
* pthread_getschedparam.c: If the parameters aren't known yet get
them from the kernel.
* pthread_setschedparam.c: Set ATTR_FLAG_SCHED_SET and
ATTR_FLAG_POLICY_SET flag for thread.
* sysdeps/unix/sysv/linux/internaltypes.h: Define ATTR_FLAG_SCHED_SET
and ATTR_FLAG_POLICY_SET.
* sysdeps/pthread/createthread.c: Use tgkill if possible.
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. */ |