mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Update.
2003-09-17 Jakub Jelinek <jakub@redhat.com> * pthread.c (manager_thread): Remove static, add attribute_hidden. (thread_self_stack): Rename to... (__pthread_self_stack): ... this. Remove static. (pthread_handle_sigcancel): Use check_thread_self (). (pthread_handle_sigrestart): Likewise. * sighandler.c (__pthread_sighandler, __pthread_sighandler_rt): Likewise. * descr.h (manager_thread): Declare. * internals.h (__pthread_self_stack): New prototype. (__manager_thread): Define. (check_thread_self): New function.
This commit is contained in:
parent
65947215c7
commit
a243f94e36
@ -1,3 +1,17 @@
|
|||||||
|
2003-09-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* pthread.c (manager_thread): Remove static, add attribute_hidden.
|
||||||
|
(thread_self_stack): Rename to...
|
||||||
|
(__pthread_self_stack): ... this. Remove static.
|
||||||
|
(pthread_handle_sigcancel): Use check_thread_self ().
|
||||||
|
(pthread_handle_sigrestart): Likewise.
|
||||||
|
* sighandler.c (__pthread_sighandler, __pthread_sighandler_rt):
|
||||||
|
Likewise.
|
||||||
|
* descr.h (manager_thread): Declare.
|
||||||
|
* internals.h (__pthread_self_stack): New prototype.
|
||||||
|
(__manager_thread): Define.
|
||||||
|
(check_thread_self): New function.
|
||||||
|
|
||||||
2003-09-15 Jakub Jelinek <jakub@redhat.com>
|
2003-09-15 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* Makefile (CFLAGS-mutex.c): Add $(uses-callbacks).
|
* Makefile (CFLAGS-mutex.c): Add $(uses-callbacks).
|
||||||
|
@ -217,6 +217,7 @@ extern char *__pthread_manager_thread_tos;
|
|||||||
/* Descriptor of the manager thread */
|
/* Descriptor of the manager thread */
|
||||||
|
|
||||||
extern struct _pthread_descr_struct __pthread_manager_thread;
|
extern struct _pthread_descr_struct __pthread_manager_thread;
|
||||||
|
extern pthread_descr manager_thread attribute_hidden;
|
||||||
|
|
||||||
/* Indicate whether at least one thread has a user-defined stack (if 1),
|
/* Indicate whether at least one thread has a user-defined stack (if 1),
|
||||||
or all threads have stacks supplied by LinuxThreads (if 0). */
|
or all threads have stacks supplied by LinuxThreads (if 0). */
|
||||||
|
@ -363,6 +363,7 @@ extern int __pthread_condattr_init (pthread_condattr_t *attr);
|
|||||||
extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
|
extern int __pthread_condattr_destroy (pthread_condattr_t *attr);
|
||||||
extern pthread_t __pthread_self (void);
|
extern pthread_t __pthread_self (void);
|
||||||
extern pthread_descr __pthread_thread_self (void);
|
extern pthread_descr __pthread_thread_self (void);
|
||||||
|
extern pthread_descr __pthread_self_stack (void) attribute_hidden;
|
||||||
extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
|
extern int __pthread_equal (pthread_t thread1, pthread_t thread2);
|
||||||
extern void __pthread_exit (void *retval);
|
extern void __pthread_exit (void *retval);
|
||||||
extern int __pthread_getschedparam (pthread_t thread, int *policy,
|
extern int __pthread_getschedparam (pthread_t thread, int *policy,
|
||||||
@ -522,4 +523,30 @@ weak_extern (__pthread_thread_self)
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef USE_TLS
|
||||||
|
# define __manager_thread (&__pthread_manager_thread)
|
||||||
|
#else
|
||||||
|
# define __manager_thread manager_thread
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern inline __attribute__((always_inline)) pthread_descr
|
||||||
|
check_thread_self (void)
|
||||||
|
{
|
||||||
|
pthread_descr self = thread_self ();
|
||||||
|
#if defined THREAD_SELF && defined INIT_THREAD_SELF
|
||||||
|
if (self == __manager_thread)
|
||||||
|
{
|
||||||
|
/* A new thread might get a cancel signal before it is fully
|
||||||
|
initialized, so that the thread register might still point to the
|
||||||
|
manager thread. Double check that this is really the manager
|
||||||
|
thread. */
|
||||||
|
self = __pthread_self_stack();
|
||||||
|
if (self != __manager_thread)
|
||||||
|
/* Oops, thread_self() isn't working yet.. */
|
||||||
|
INIT_THREAD_SELF(self, self->p_nr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* internals.h */
|
#endif /* internals.h */
|
||||||
|
@ -22,7 +22,8 @@ void __pthread_sighandler(int signo, SIGCONTEXT ctx)
|
|||||||
{
|
{
|
||||||
pthread_descr self;
|
pthread_descr self;
|
||||||
char * in_sighandler;
|
char * in_sighandler;
|
||||||
self = thread_self();
|
self = check_thread_self();
|
||||||
|
|
||||||
/* If we're in a sigwait operation, just record the signal received
|
/* If we're in a sigwait operation, just record the signal received
|
||||||
and return without calling the user's handler */
|
and return without calling the user's handler */
|
||||||
if (THREAD_GETMEM(self, p_sigwaiting)) {
|
if (THREAD_GETMEM(self, p_sigwaiting)) {
|
||||||
@ -46,7 +47,8 @@ void __pthread_sighandler_rt(int signo, struct siginfo *si,
|
|||||||
{
|
{
|
||||||
pthread_descr self;
|
pthread_descr self;
|
||||||
char * in_sighandler;
|
char * in_sighandler;
|
||||||
self = thread_self();
|
self = check_thread_self();
|
||||||
|
|
||||||
/* If we're in a sigwait operation, just record the signal received
|
/* If we're in a sigwait operation, just record the signal received
|
||||||
and return without calling the user's handler */
|
and return without calling the user's handler */
|
||||||
if (THREAD_GETMEM(self, p_sigwaiting)) {
|
if (THREAD_GETMEM(self, p_sigwaiting)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user