X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fpthread_create.c;h=9c24b844183993cf9b1ea2c18138db6e1ae7dc55;hb=52213f734134055968ef14bf54b71f0dd370763a;hp=2098e752f969ec4dab516bbb5937d372351d98b4;hpb=98e02144dabec08c1d652a8cb233900516da6d23;p=musl diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index 2098e752..9c24b844 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -45,6 +45,7 @@ static void docancel(struct pthread *self) static void cancel_handler(int sig, siginfo_t *si, void *ctx) { struct pthread *self = __pthread_self(); + if (si->si_code > 0 || si->si_pid != self->pid) return; self->cancel = 1; if (self->canceldisable || (!self->cancelasync && !self->cancelpoint)) return; @@ -75,6 +76,8 @@ static struct { static void rsyscall_handler(int sig, siginfo_t *si, void *ctx) { + if (si->si_code > 0 || si->si_pid != __pthread_self()->pid) return; + if (rs.cnt == libc.threads_minus_1) return; if (syscall6(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],