mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-14 13:21:54 -08:00
We have to restore the signal before jump_to_sigsegv_handler()
This commit is contained in:
parent
e647d62b33
commit
50c10a5d8d
1 changed files with 4 additions and 1 deletions
|
|
@ -327,7 +327,7 @@ handle_or_queue(cl_object signal_code, int code)
|
|||
int old_errno = errno;
|
||||
cl_env_ptr the_env = ecl_process_env();
|
||||
/*
|
||||
* If interrupts are disabled by C we are not so eager on
|
||||
* If interrupts are disabled by lisp we are not so eager on
|
||||
* detecting when the interrupts become enabled again. We
|
||||
* queue the signal and are done with that.
|
||||
*/
|
||||
|
|
@ -398,12 +398,14 @@ handler_fn_protype(sigsegv_handler, int sig, siginfo_t *info, void *aux)
|
|||
# ifdef ECL_DOWN_STACK
|
||||
if ((char*)info->si_addr > the_env->cs_barrier &&
|
||||
(char*)info->si_addr <= the_env->cs_org) {
|
||||
unblock_signal(SIGSEGV);
|
||||
jump_to_sigsegv_handler(the_env);
|
||||
return;
|
||||
}
|
||||
# else
|
||||
if ((char*)info->si_addr < the_env->cs_barrier &&
|
||||
(char*)info->si_addr >= the_env->cs_org) {
|
||||
unblock_signal(SIGSEGV);
|
||||
jump_to_sigsegv_handler(the_env);
|
||||
return;
|
||||
}
|
||||
|
|
@ -415,6 +417,7 @@ handler_fn_protype(sigsegv_handler, int sig, siginfo_t *info, void *aux)
|
|||
* access violation. Thus we assume the worst case and jump to
|
||||
* the outermost handler.
|
||||
*/
|
||||
unblock_signal(SIGSEGV);
|
||||
jump_to_sigsegv_handler(the_env);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue