diff options
author | davidxu <davidxu@FreeBSD.org> | 2008-03-16 03:22:38 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2008-03-16 03:22:38 +0000 |
commit | 3da38e35b432b5fa7610547f1a01f367bdae5dbf (patch) | |
tree | c86bc37b594d6bf8e83b23651ce7555a0bbc637a /lib/libthr | |
parent | f924bfc1c5932f20f0ee3006632ee0a06658cd6a (diff) | |
download | FreeBSD-src-3da38e35b432b5fa7610547f1a01f367bdae5dbf.zip FreeBSD-src-3da38e35b432b5fa7610547f1a01f367bdae5dbf.tar.gz |
Actually delete SIGCANCEL mask for suspended thread, so the signal will not
be masked when it is resumed.
Diffstat (limited to 'lib/libthr')
-rw-r--r-- | lib/libthr/thread/thr_create.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c index 0dc1436..6eb3693 100644 --- a/lib/libthr/thread/thr_create.c +++ b/lib/libthr/thread/thr_create.c @@ -168,6 +168,7 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr, SIGDELSET(set, SIGTRAP); __sys_sigprocmask(SIG_SETMASK, &set, &oset); new_thread->sigmask = oset; + SIGDELSET(new_thread->sigmask, SIGCANCEL); } ret = thr_new(¶m, sizeof(param)); @@ -181,10 +182,8 @@ _pthread_create(pthread_t * thread, const pthread_attr_t * attr, ret = EAGAIN; } - if (create_suspended) { + if (create_suspended) __sys_sigprocmask(SIG_SETMASK, &oset, NULL); - SIGDELSET(oset, SIGCANCEL); - } if (ret != 0) { if (!locked) |