+ 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
|
(define-interface scsh-signals-interface
|
||||||
(export signal-process
|
(export signal-process
|
||||||
signal-process-group
|
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
|
;; 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
|
set-interrupt-handler
|
||||||
interrupt-handler
|
interrupt-handler
|
||||||
|
|
||||||
|
ignore-signal
|
||||||
|
handle-signal-default
|
||||||
|
|
||||||
;; reexported from low-interrupt
|
;; reexported from low-interrupt
|
||||||
interrupt/alrm interrupt/alarm
|
interrupt/alrm interrupt/alarm
|
||||||
interrupt/int interrupt/keyboard
|
interrupt/int interrupt/keyboard
|
||||||
|
|
|
@ -205,6 +205,12 @@
|
||||||
(make-interrupt-pending interrupt))
|
(make-interrupt-pending interrupt))
|
||||||
(lp event))))
|
(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.
|
;;; I am ashamed to say the 33 below is completely bogus.
|
||||||
;;; What we want is a value that is 1 + max interrupt value.
|
;;; 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;
|
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_value s48_init_sighandlers(void)
|
||||||
{
|
{
|
||||||
S48_EXPORT_FUNCTION(sig2interrupt);
|
S48_EXPORT_FUNCTION(sig2interrupt);
|
||||||
S48_EXPORT_FUNCTION(do_default_sigaction);
|
S48_EXPORT_FUNCTION(do_default_sigaction);
|
||||||
|
S48_EXPORT_FUNCTION(ignore_signal);
|
||||||
|
S48_EXPORT_FUNCTION(handle_signal_default);
|
||||||
|
|
||||||
return S48_UNSPECIFIC;
|
return S48_UNSPECIFIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue