[Ecls-list] [12.7.1] SI:WAIT-FOR-ALL-PROCESSES takes zero args
Jerry James
loganjerry at gmail.com
Wed Aug 8 17:10:15 UTC 2012
On Wed, Aug 8, 2012 at 10:52 AM, Jerry James <loganjerry at gmail.com> wrote:
> But signal handlers have to match handler_fn_prototype, which means
> accepting either 1 or 3 arguments, and SI:WAIT-FOR-ALL-PROCESSES
> accepts zero arguments. What's the best way to fix this?
>
> By the way, it looks like the other elements of known_signals with
> non-nil handlers also specify functions that don't take the correct
> argument list. That's SI:TERMINAL-INTERRUPT for SIGINT,
> EXT:ILLEGAL-INSTRUCTION for SIGILL, and EXT:SEGMENTATION-VIOLATION for
> SIGBUS and SIGSEGV.
That last part is nonsense. I should have dug a little deeper first.
I'm trying to build with ECL_THREADS, and this code in
handle_signal_now() (unixint.d) appears to be the problem:
case t_symbol:
/*
* When we bind a handler to a signal, it may either
* be a function, a symbol denoting a function or
* a symbol denoting a condition.
*/
if (cl_find_class(2, signal_code, ECL_NIL) != ECL_NIL)
cl_cerror(2, str_ignore_signal, signal_code);
#ifdef ECL_THREADS
else if (!Null(process))
_ecl_funcall3(signal_code, @':process', process);
#endif
else
_ecl_funcall1(signal_code);
break;
So SI:WAIT-FOR-ALL-PROCESSES needs to accept a :process keyword
argument when ECL_THREADS is defined.
--
Jerry James
http://www.jamezone.org/
More information about the ecl-devel
mailing list