In do_interrupt_process(), the queue lock was held.

This commit is contained in:
Juan Jose Garcia Ripoll 2012-02-19 00:55:53 +01:00
parent 9707940125
commit 28b007b0d9

View file

@ -554,6 +554,7 @@ handler_fn_protype(sigsegv_handler, int sig, siginfo_t *info, void *aux)
";;;\n\n";
#endif
cl_env_ptr the_env;
ecl_internal_error("SIGSEGV");
reinstall_signal(sig, sigsegv_handler);
if (!ecl_get_option(ECL_OPT_BOOTED)) {
ecl_internal_error("Got signal before environment was installed"
@ -844,10 +845,8 @@ ecl_interrupt_process(cl_object process, cl_object function)
if (process->process.active == 1) {
int ok;
function = si_coerce_to_function(function);
mp_get_lock_wait(cl_core.signal_queue_lock);
queue_signal(process->process.env, function);
ok = do_interrupt_thread(process);
mp_giveup_lock(cl_core.signal_queue_lock);
if (ok) return;
}
FEerror("Cannot interrupt process ~A", 1, process);