mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
htl: Let pthread_self and cancellability called early
When applications redirect some functions they might get called before libpthread is fully initialized. They may still expected pthread_self and cancellable functions to work, so cope with such calls in that situation.
This commit is contained in:
parent
c622ac1b86
commit
70ff58ced4
@ -25,6 +25,10 @@ int __pthread_enable_asynccancel (void)
|
||||
struct __pthread *p = _pthread_self ();
|
||||
int oldtype;
|
||||
|
||||
if (___pthread_self == NULL)
|
||||
/* We are not initialized yet, we can't be cancelled anyway. */
|
||||
return PTHREAD_CANCEL_DEFERRED;
|
||||
|
||||
__pthread_mutex_lock (&p->cancel_lock);
|
||||
oldtype = p->cancel_type;
|
||||
p->cancel_type = PTHREAD_CANCEL_ASYNCHRONOUS;
|
||||
@ -39,6 +43,10 @@ void __pthread_disable_asynccancel (int oldtype)
|
||||
{
|
||||
struct __pthread *p = _pthread_self ();
|
||||
|
||||
if (___pthread_self == NULL)
|
||||
/* We are not initialized yet, we can't be cancelled anyway. */
|
||||
return;
|
||||
|
||||
__pthread_mutex_lock (&p->cancel_lock);
|
||||
p->cancel_type = oldtype;
|
||||
__pthread_mutex_unlock (&p->cancel_lock);
|
||||
|
@ -24,7 +24,13 @@
|
||||
pthread_t
|
||||
__pthread_self (void)
|
||||
{
|
||||
struct __pthread *self = _pthread_self ();
|
||||
struct __pthread *self;
|
||||
|
||||
if (___pthread_self == NULL)
|
||||
/* We are not initialized yet, we are the first thread. */
|
||||
return 1;
|
||||
|
||||
self = _pthread_self ();
|
||||
assert (self != NULL);
|
||||
|
||||
return self->thread;
|
||||
|
Loading…
Reference in New Issue
Block a user