src/c/unixint.d, src/c/stacks.d: we cannot execute signal handlers in separate stacks, because it confuses the lisp environment. Instead when detecting stack overflows we just jump out.

This commit is contained in:
Juan Jose Garcia Ripoll 2009-10-08 20:19:28 +02:00
parent 8b3ee8313d
commit 2f254ceb59
2 changed files with 3 additions and 3 deletions

View file

@ -582,7 +582,7 @@ init_stacks(cl_env_ptr env, char *new_cs_org)
#endif
cs_set_size(env, ecl_get_option(ECL_OPT_C_STACK_SIZE));
#if defined(HAVE_SIGPROCMASK) && defined(SA_SIGINFO) && defined(SA_ONSTACK)
#if 0 /* defined(HAVE_SIGPROCMASK) && defined(SA_SIGINFO) && defined(SA_ONSTACK) */
if (ecl_get_option(ECL_OPT_SIGALTSTACK_SIZE)) {
stack_t new_stack;
cl_index size = ecl_get_option(ECL_OPT_SIGALTSTACK_SIZE);

View file

@ -212,7 +212,7 @@ mysignal(int code, void (*handler)(int, siginfo_t *, void*))
#ifdef SA_SIGINFO
new_action.sa_sigaction = handler;
new_action.sa_flags = SA_SIGINFO;
# ifdef SA_ONSTACK
# if 0 && defined(SA_ONSTACK)
if (code == SIGSEGV) {
new_action.sa_flags |= SA_ONSTACK;
}
@ -606,7 +606,7 @@ handler_fn_protype(sigsegv_handler, int sig, siginfo_t *info, void *aux)
return;
}
# endif
# ifdef SA_ONSTACK
# if 0 && defined(SA_ONSTACK)
/* The handler is executed in an externally allocated stack, and
* thus it is not safe to execute lisp code here. We just bounce
* up to the outermost toplevel.