[Ecls-list] [12.7.1] SI:WAIT-FOR-ALL-PROCESSES takes zero args

Jerry James loganjerry at gmail.com
Wed Aug 8 16:52:07 UTC 2012


I'm trying to build 12.7.1 for Fedora, and am running into a build error:


;;; Loading lsp/format.lsp
;;; About to load cmp/load.lsp
;;; Unable to execute program "file"
;;; Condition
;;; Wrong number of arguments passed to function #<compiled-function
SI:WAIT-FOR-ALL-PROCESSES>.
;;; Unable to execute program "gcc"
;;; Condition
;;; Wrong number of arguments passed to function #<compiled-function
SI:WAIT-FOR-ALL-PROCESSES>.
;;; Unable to execute program "gcc"
;;; Condition
;;; Wrong number of arguments passed to function #<compiled-function
SI:WAIT-FOR-ALL-PROCESSES>.
;;; System features: NIL
;;;
;;; Now we are in shape to do something useful.
;;; End of bare.lsp
[snip]
;;; Emitting code for SHARP---READER.
;;; Note:
;;;   Invoking external command:
;;;   gcc -I. -I/home/jamesjer/rpmbuild/BUILD/ecl-12.7.1/build/
-DECL_API -I/home/jamesjer/rpmbuild/BUILD/ecl-12.7.1/build/c
-I/usr/lib64/libffi-3.0.10/include -D_GNU_SOURCE
-D_FILE_OFFSET_BITS=64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
-fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64
-mtune=generic -fPIC -D_THREAD_SAFE -Dlinux
-I/home/jamesjer/rpmbuild/BUILD/ecl-12.7.1/src/c -w -c lsp/export.c -o
lsp/export.o
Condition of type: SIMPLE-PROGRAM-ERROR
Wrong number of arguments passed to function #<compiled-function
SI:WAIT-FOR-ALL-PROCESSES>.

Available restarts:

1. (ABORT) ABORT

Top level in: #<process TOP-LEVEL>.
>


I think this is because SI:WAIT-FOR-ALL-PROCESSES is registered as a
signal handler in unixint.d:

static struct {
	int code;
	char *name;
	cl_object handler;
} known_signals[] = {
[snip]
#ifdef SIGCHLD
	{ SIGCHLD, "+SIGCHLD+", @'si::wait-for-all-processes'},
#endif

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.
-- 
Jerry James
http://www.jamezone.org/




More information about the ecl-devel mailing list