[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