diff options
author | Rich Felker <dalias@aerifal.cx> | 2015-04-10 03:47:42 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-04-10 03:47:42 -0400 |
commit | a2d3053354432f3e3b5a787c1527d4b414e9acb0 (patch) | |
tree | 372876e526e95a0f682264fc4cc8909e0951d835 /src/thread | |
parent | f08ab9e61a147630497198fe3239149275c0a3f4 (diff) | |
download | musl-a2d3053354432f3e3b5a787c1527d4b414e9acb0.tar.gz |
apply vmlock wait to __unmapself in pthread_exit
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/pthread_create.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index 08c5f4f8..33808ce5 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -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); |