+ IGNORE-SIGNAL to ignore synchronous signals
+ HANDLE-DEFAULT-SIGNAL to re-install default signal handler for synchronous signals
This commit is contained in:
parent
354188c3c5
commit
03d11e2576
|
@ -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
|
||||
|
|
|
@ -204,6 +204,12 @@
|
|||
(call-interrupt-handler interrupt)
|
||||
(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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue