summaryrefslogtreecommitdiff
path: root/pthread/pt-exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'pthread/pt-exit.c')
-rw-r--r--pthread/pt-exit.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/pthread/pt-exit.c b/pthread/pt-exit.c
index 941526ae..c01efda0 100644
--- a/pthread/pt-exit.c
+++ b/pthread/pt-exit.c
@@ -1,5 +1,5 @@
/* Thread termination.
- Copyright (C) 2000, 2002, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002, 2005, 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -28,14 +28,13 @@
/* Terminate the current thread and make STATUS available to any
- thread that might join us. */
+ thread that might join it. */
void
pthread_exit (void *status)
{
struct __pthread *self = _pthread_self ();
struct __pthread_cancelation_handler **handlers;
int oldstate;
- int need_dealloc;
/* Run any cancelation handlers. According to POSIX, the
cancellation cleanup handlers should be called with cancellation
@@ -74,7 +73,6 @@ pthread_exit (void *status)
if (self->tcb)
_dl_deallocate_tls (self->tcb, 1);
#endif /* ENABLE_TLS */
- __pthread_thread_dealloc (self);
switch (self->state)
{
@@ -90,7 +88,8 @@ pthread_exit (void *status)
deallocate our own stack. However, it will eventually be
reused when this thread structure is recycled. */
__pthread_mutex_unlock (&self->state_lock);
- need_dealloc = 1;
+
+ __pthread_dealloc (self);
break;
@@ -107,7 +106,6 @@ pthread_exit (void *status)
waiting to join us. */
pthread_cond_broadcast (&self->state_cond);
__pthread_mutex_unlock (&self->state_lock);
- need_dealloc = 0;
break;
}
@@ -117,7 +115,7 @@ pthread_exit (void *status)
This means that before freeing any resources, such a thread
should make sure that this thread is really halted. */
- __pthread_thread_halt (self, need_dealloc);
+ __pthread_thread_halt (self);
/* NOTREACHED */
abort ();