run dtors before taking the exit-lock in pthread exit
authorRich Felker <dalias@aerifal.cx>
Tue, 14 Jun 2011 05:25:17 +0000 (01:25 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 14 Jun 2011 05:25:17 +0000 (01:25 -0400)
previously a long-running dtor could cause pthread_detach to block.

src/thread/pthread_create.c

index d1eea0c..c856c58 100644 (file)
@@ -22,10 +22,10 @@ void __pthread_unwind_next(struct __ptcb *cb)
                longjmp((void *)cb->__next->__jb, 1);
        }
 
                longjmp((void *)cb->__next->__jb, 1);
        }
 
-       __lock(&self->exitlock);
-
        __pthread_tsd_run_dtors();
 
        __pthread_tsd_run_dtors();
 
+       __lock(&self->exitlock);
+
        /* Mark this thread dead before decrementing count */
        self->dead = 1;
 
        /* Mark this thread dead before decrementing count */
        self->dead = 1;