pthread exit stuff: don't bother setting errno when we won't check it.
[musl] / src / thread / pthread_create.c
index 5248700..a9a0817 100644 (file)
@@ -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);