apply vmlock wait to __unmapself in pthread_exit
authorRich Felker <dalias@aerifal.cx>
Fri, 10 Apr 2015 07:47:42 +0000 (03:47 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 10 Apr 2015 07:47:42 +0000 (03:47 -0400)
src/thread/pthread_create.c

index 08c5f4f..33808ce 100644 (file)
@@ -108,6 +108,10 @@ _Noreturn void __pthread_exit(void *result)
                if (self->robust_list.off)
                        __syscall(SYS_set_robust_list, 0, 3*sizeof(long));
 
+               /* Since __unmapself bypasses the normal munmap code path,
+                * explicitly wait for vmlock holders first. */
+               __vm_wait();
+
                /* The following call unmaps the thread's stack mapping
                 * and then exits without touching the stack. */
                __unmapself(self->map_base, self->map_size);