summaryrefslogtreecommitdiffstats
path: root/libc/bionic
diff options
context:
space:
mode:
authorJack Ren <jack.ren@intel.com>2011-11-30 10:50:59 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-11-30 10:50:59 -0800
commitbec5dec947b1ad097c200888365a3ec61f9e7a28 (patch)
treeee6d8a4aa949c13c9f2e95da9936972b53ebe242 /libc/bionic
parent338a06f4bcb12c4418e66a6c3210a236259c1bf8 (diff)
parent0c3d21e63c6e75ae73aaf2b8d64af0bd8caa6beb (diff)
downloadbionic-bec5dec947b1ad097c200888365a3ec61f9e7a28.zip
bionic-bec5dec947b1ad097c200888365a3ec61f9e7a28.tar.gz
bionic-bec5dec947b1ad097c200888365a3ec61f9e7a28.tar.bz2
am 0c3d21e6: am e480fc83: bionic: fix pthread_{create, exit}/signal race condition
* commit '0c3d21e63c6e75ae73aaf2b8d64af0bd8caa6beb': bionic: fix pthread_{create, exit}/signal race condition
Diffstat (limited to 'libc/bionic')
-rw-r--r--libc/bionic/pthread.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index 63d885a..eeff364 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -568,6 +568,7 @@ void pthread_exit(void * retval)
void* stack_base = thread->attr.stack_base;
int stack_size = thread->attr.stack_size;
int user_stack = (thread->attr.flags & PTHREAD_ATTR_FLAG_USER_STACK) != 0;
+ sigset_t mask;
// call the cleanup handlers first
while (thread->cleanup_stack) {
@@ -610,6 +611,10 @@ void pthread_exit(void * retval)
pthread_mutex_unlock(&gThreadListLock);
}
+ sigfillset(&mask);
+ sigdelset(&mask, SIGSEGV);
+ (void)sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL);
+
// destroy the thread stack
if (user_stack)
_exit_thread((int)retval);