blob: 4966e2344cea13c405bbb4b1d57eca062b54098c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include "pthread_impl.h"
#undef pthread_self
void pthread_exit(void *result)
{
int i;
struct pthread *self = pthread_self();
self->result = result;
a_dec(&libc.threads_minus_1);
if (libc.threads_minus_1 < 0)
exit(0);
LOCK(&self->exitlock);
if (self->tsd_used) for (i=0; i<PTHREAD_KEYS_MAX; i++)
if (self->tsd[i] && libc.tsd_keys[i])
libc.tsd_keys[i](self->tsd[i]);
if (self->detached && self->map_base)
__unmapself(self->map_base, self->map_size);
__syscall_exit(0);
}
|