X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fthread%2Fpthread_create.c;h=a9a08171c0c4d09c9ab497d9d8fd231fd6977562;hb=74950b336d27532718428c7f5f98409c74f30819;hp=52487001484ce8c1edfc08cd7b7027055c4a130d;hpb=729cb49f52c825ac44f437e1ff0865d9f0b3626a;p=musl diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c index 52487001..a9a08171 100644 --- a/src/thread/pthread_create.c +++ b/src/thread/pthread_create.c @@ -30,11 +30,11 @@ void __pthread_unwind_next(struct __ptcb *cb) exit(0); if (self->detached && self->map_base) { - syscall(__NR_rt_sigprocmask, SIG_BLOCK, (long)(uint64_t[1]){-1},0,8); + __syscall(__NR_rt_sigprocmask, SIG_BLOCK, (long)(uint64_t[1]){-1},0,8); __unmapself(self->map_base, self->map_size); } - syscall(SYS_exit, 0); + __syscall(SYS_exit, 0); } static void docancel(struct pthread *self) @@ -89,6 +89,7 @@ static struct { static void rsyscall_handler(int sig, siginfo_t *si, void *ctx) { struct pthread *self = __pthread_self(); + long r; if (!rs.hold || rs.cnt == libc.threads_minus_1) return; @@ -99,8 +100,9 @@ static void rsyscall_handler(int sig, siginfo_t *si, void *ctx) return; } - if (syscall(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2], - rs.arg[3], rs.arg[4], rs.arg[5]) < 0 && !rs.err) rs.err=errno; + r = __syscall(rs.nr, rs.arg[0], rs.arg[1], + rs.arg[2], rs.arg[3], rs.arg[4], rs.arg[5]); + if (r < 0) rs.err=-r; a_inc(&rs.cnt); __wake(&rs.cnt, 1, 1);