projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
block signals in timer threads
[musl]
/
src
/
time
/
timer_create.c
diff --git
a/src/time/timer_create.c
b/src/time/timer_create.c
index
cc10bef
..
593f73a
100644
(file)
--- a/
src/time/timer_create.c
+++ b/
src/time/timer_create.c
@@
-51,8
+51,7
@@
static void install_handler()
.sa_flags = SA_SIGINFO | SA_RESTART
};
__libc_sigaction(SIGTIMER, &sa, 0);
.sa_flags = SA_SIGINFO | SA_RESTART
};
__libc_sigaction(SIGTIMER, &sa, 0);
- sigaddset(&sa.sa_mask, SIGTIMER);
- __libc_sigprocmask(SIG_UNBLOCK, &sa.sa_mask, 0);
+ __syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, SIGTIMER_SET, 0, 8);
}
static void *start(void *arg)
}
static void *start(void *arg)
@@
-81,6
+80,7
@@
int timer_create(clockid_t clk, struct sigevent *evp, timer_t *res)
struct start_args args;
struct ksigevent ksev, *ksevp=0;
int timerid;
struct start_args args;
struct ksigevent ksev, *ksevp=0;
int timerid;
+ sigset_t set;
switch (evp ? evp->sigev_notify : SIGEV_SIGNAL) {
case SIGEV_NONE:
switch (evp ? evp->sigev_notify : SIGEV_SIGNAL) {
case SIGEV_NONE:
@@
-105,7
+105,10
@@
int timer_create(clockid_t clk, struct sigevent *evp, timer_t *res)
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_barrier_init(&args.b, 0, 2);
args.sev = evp;
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_barrier_init(&args.b, 0, 2);
args.sev = evp;
+ sigfillset(&set);
+ pthread_sigmask(SIG_BLOCK, &set, &set);
r = pthread_create(&td, &attr, start, &args);
r = pthread_create(&td, &attr, start, &args);
+ pthread_sigmask(SIG_SETMASK, &set, 0);
if (r) {
errno = r;
return -1;
if (r) {
errno = r;
return -1;