+
+ /* If pthread_create has not yet been called,
+ * implementation-internal signals might not
+ * yet have been unblocked. They must be
+ * unblocked before any signal handler is
+ * installed, so that an application cannot
+ * receive an illegal sigset_t (with them
+ * blocked) as part of the ucontext_t passed
+ * to the signal handler. */
+ if (!libc.threaded && !unmask_done) {
+ __syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
+ 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
+ * while abort is terminating the process after simply
+ * calling raise(SIGABRT) failed to do so. */
+ if (sa->sa_handler != SIG_DFL && sig == SIGABRT) {
+ __block_all_sigs(&set);
+ LOCK(__abort_lock);