projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pthread exit stuff: don't bother setting errno when we won't check it.
[musl]
/
src
/
thread
/
pthread_create.c
diff --git
a/src/thread/pthread_create.c
b/src/thread/pthread_create.c
index
5248700
..
a9a0817
100644
(file)
--- 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) {
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);
}
__unmapself(self->map_base, self->map_size);
}
- syscall(SYS_exit, 0);
+
__
syscall(SYS_exit, 0);
}
static void docancel(struct pthread *self)
}
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();
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;
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;
}
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);
a_inc(&rs.cnt);
__wake(&rs.cnt, 1, 1);