diff options
Diffstat (limited to 'src/signal')
-rw-r--r-- | src/signal/sigaction.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/signal/sigaction.c b/src/signal/sigaction.c index af47195e..05445089 100644 --- a/src/signal/sigaction.c +++ b/src/signal/sigaction.c @@ -21,6 +21,8 @@ void __get_handler_set(sigset_t *set) memcpy(set, handler_set, sizeof handler_set); } +volatile int __eintr_valid_flag; + int __libc_sigaction(int sig, const struct sigaction *restrict sa, struct sigaction *restrict old) { struct k_sigaction ksa, ksa_old; @@ -43,6 +45,10 @@ int __libc_sigaction(int sig, const struct sigaction *restrict sa, struct sigact SIGPT_SET, 0, _NSIG/8); unmask_done = 1; } + + if (!(sa->sa_flags & SA_RESTART)) { + a_store(&__eintr_valid_flag, 1); + } } /* Changing the disposition of SIGABRT to anything but * SIG_DFL requires a lock, so that it cannot be changed |