From 50c10a5d8d2c9128feeae6e31ecb9aed231e9ec9 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Wed, 16 Sep 2009 20:45:15 +0200 Subject: [PATCH] We have to restore the signal before jump_to_sigsegv_handler() --- src/c/unixint.d | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/c/unixint.d b/src/c/unixint.d index b37f394e4..258213896 100644 --- a/src/c/unixint.d +++ b/src/c/unixint.d @@ -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 }