+ IGNORE-SIGNAL to ignore synchronous signals

+ HANDLE-DEFAULT-SIGNAL to re-install default signal handler for
  synchronous signals
This commit is contained in:
mainzelm 2005-09-13 13:14:16 +00:00
parent 354188c3c5
commit 03d11e2576
3 changed files with 31 additions and 2 deletions

View File

@ -437,9 +437,9 @@
(define-interface scsh-signals-interface
(export signal-process
signal-process-group
;; JMG: this syscalls doesn't cooperate with the thread-system
;; JMG: this syscall doesn't cooperate with the thread-system
;; pause-until-interrupt
itimer ;; now defined in low-interrupt as a artificial interrupt
itimer ;; now defined in low-interrupt as an artificial interrupt
))
@ -1061,6 +1061,9 @@
set-interrupt-handler
interrupt-handler
ignore-signal
handle-signal-default
;; reexported from low-interrupt
interrupt/alrm interrupt/alarm
interrupt/int interrupt/keyboard

View File

@ -205,6 +205,12 @@
(make-interrupt-pending interrupt))
(lp event))))
;;; Dealing with synchronous signals
(import-lambda-definition ignore-signal (sig) "ignore_signal")
(import-lambda-definition handle-signal-default (sig) "handle_signal_default")
;;; I am ashamed to say the 33 below is completely bogus.
;;; What we want is a value that is 1 + max interrupt value.

View File

@ -68,10 +68,30 @@ s48_value do_default_sigaction(s48_value _signal)
return S48_UNSPECIFIC;
}
s48_value ignore_signal(s48_value _signal)
{
sig_t res = signal(s48_extract_fixnum(_signal), SIG_IGN);
if (res == SIG_ERR)
s48_raise_os_error_1(errno, _signal);
return S48_UNSPECIFIC;
}
s48_value handle_signal_default(s48_value _signal)
{
sig_t res = signal(s48_extract_fixnum(_signal), SIG_DFL);
if (res == SIG_ERR)
s48_raise_os_error_1(errno, _signal);
return S48_UNSPECIFIC;
}
s48_value s48_init_sighandlers(void)
{
S48_EXPORT_FUNCTION(sig2interrupt);
S48_EXPORT_FUNCTION(do_default_sigaction);
S48_EXPORT_FUNCTION(ignore_signal);
S48_EXPORT_FUNCTION(handle_signal_default);
return S48_UNSPECIFIC;
}