Since the cause of the problems with the __fillcontextx() was
identified, unify the code of check_deferred_signal() for all architectures, making the variant under #ifdef x86 common. Tested by: marius (sparc64) Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
This commit is contained in:
parent
07d46f9c18
commit
91ddaeb725
@ -318,31 +318,23 @@ check_deferred_signal(struct pthread *curthread)
|
||||
ucontext_t *uc;
|
||||
struct sigaction act;
|
||||
siginfo_t info;
|
||||
int uc_len;
|
||||
|
||||
if (__predict_true(curthread->deferred_siginfo.si_signo == 0))
|
||||
return;
|
||||
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
int uc_len;
|
||||
uc_len = __getcontextx_size();
|
||||
uc = alloca(uc_len);
|
||||
getcontext(uc);
|
||||
if (curthread->deferred_siginfo.si_signo == 0)
|
||||
return;
|
||||
__fillcontextx2((char *)uc);
|
||||
#else
|
||||
ucontext_t ucv;
|
||||
uc = &ucv;
|
||||
getcontext(uc);
|
||||
#endif
|
||||
if (curthread->deferred_siginfo.si_signo != 0) {
|
||||
act = curthread->deferred_sigact;
|
||||
uc->uc_sigmask = curthread->deferred_sigmask;
|
||||
memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t));
|
||||
/* remove signal */
|
||||
curthread->deferred_siginfo.si_signo = 0;
|
||||
handle_signal(&act, info.si_signo, &info, uc);
|
||||
}
|
||||
act = curthread->deferred_sigact;
|
||||
uc->uc_sigmask = curthread->deferred_sigmask;
|
||||
memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t));
|
||||
/* remove signal */
|
||||
curthread->deferred_siginfo.si_signo = 0;
|
||||
handle_signal(&act, info.si_signo, &info, uc);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user