From b54f17085cd3305d486be30a5e8620ebb589e213 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Fri, 20 Aug 2010 23:41:30 +0200 Subject: [PATCH] New condition for Unix signals. --- src/c/symbols_list.h | 4 ++++ src/c/symbols_list2.h | 4 ++++ src/c/unixint.d | 2 +- src/clos/conditions.lsp | 9 +++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 102f85def..b5908a51f 100755 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -1945,5 +1945,9 @@ cl_symbols[] = { {EXT_ "SSE-PACK-ELEMENT-TYPE", EXT_ORDINARY, si_sse_pack_element_type, 1, OBJNULL}, #endif +{EXT_ "UNIX-SIGNAL-RECEIVED", EXT_ORDINARY, NULL, -1, OBJNULL}, +{EXT_ "UNIX-SIGNAL-RECEIVED-CODE", EXT_ORDINARY, NULL, -1, OBJNULL}, +{KEY_ "CODE", KEYWORD, NULL, -1, OBJNULL}, + /* Tag for end of list */ {NULL, CL_ORDINARY, NULL, -1, OBJNULL}}; diff --git a/src/c/symbols_list2.h b/src/c/symbols_list2.h index 8e5d9fe7f..aaf11dece 100755 --- a/src/c/symbols_list2.h +++ b/src/c/symbols_list2.h @@ -1945,5 +1945,9 @@ cl_symbols[] = { {EXT_ "SSE-PACK-ELEMENT-TYPE","si_sse_pack_element_type"}, #endif +{EXT_ "UNIX-SIGNAL-RECEIVED",NULL}, +{EXT_ "UNIX-SIGNAL-RECEIVED-CODE",NULL}, +{KEY_ "CODE",NULL}, + /* Tag for end of list */ {NULL,NULL}}; diff --git a/src/c/unixint.d b/src/c/unixint.d index 056479f1f..528afecd3 100644 --- a/src/c/unixint.d +++ b/src/c/unixint.d @@ -367,7 +367,7 @@ handle_signal_now(cl_object signal_code) { switch (type_of(signal_code)) { case t_fixnum: - FEerror("Serious signal ~D caught.", 1, signal_code); + cl_error(3, @'ext::unix-signal-received', @':code', signal_code); break; case t_symbol: cl_error(1, signal_code); diff --git a/src/clos/conditions.lsp b/src/clos/conditions.lsp index 18d475038..91a9cb8b5 100644 --- a/src/clos/conditions.lsp +++ b/src/clos/conditions.lsp @@ -515,6 +515,15 @@ or return to an outer frame, undoing all the function calls so far." (format stream "Memory limit reached. Please jump to an outer pointer, quit program and enlarge the memory limits before executing the program again.")))) +(define-condition ext:unix-signal-received () + ((code :type fixnum + :initform 0 + :initarg :signal-code + :accessor ext:unix-signal-received-code)) + (:report (lambda (condition stream) + (format stream "Serious signal ~D caught." + (ext:unix-signal-received-code condition))))) + (define-condition type-error (error) ((datum :INITARG :DATUM :READER type-error-datum) (expected-type :INITARG :EXPECTED-TYPE :READER type-error-expected-type))