OSDN Git Service

add __timedwait backend workaround for old kernels where futex EINTRs
[android-x86/external-musl-libc.git] / src / signal / sigaction.c
index af47195..0544508 100644 (file)
@@ -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