make pthread_exit run dtors for last thread, wait to decrement thread count
authorRich Felker <dalias@aerifal.cx>
Sat, 19 Feb 2011 15:38:57 +0000 (10:38 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 19 Feb 2011 15:38:57 +0000 (10:38 -0500)
src/thread/pthread_create.c

index b6c475d0ad7349c45acba92d8886f15b5ac22f45..7c436957f8e17b33c8ae8a8a9602b82cfe030690 100644 (file)
@@ -10,9 +10,6 @@ void __pthread_unwind_next(struct __ptcb *cb)
        self = pthread_self();
        if (self->cancel) self->result = PTHREAD_CANCELLED;
 
-       if (!a_fetch_add(&libc.threads_minus_1, -1))
-               exit(0);
-
        LOCK(&self->exitlock);
 
        not_finished = self->tsd_used;
@@ -28,6 +25,9 @@ void __pthread_unwind_next(struct __ptcb *cb)
                }
        }
 
+       if (!a_fetch_add(&libc.threads_minus_1, -1))
+               exit(0);
+
        if (self->detached && self->map_base)
                __unmapself(self->map_base, self->map_size);