>>>>> "RT" == RT Happe <rthappe@mathematik.uni-freiburg.de> writes:
RT> The discussion of 3.9.0.1 Interrupt Handlers in the Scsh manual suggests
RT> to me that when the scshvm receives e.g. a TSTP signal, it delivers the
RT> corresponding interrupt to the running Scheme code that may choose to
RT> block or handle it. Concretely, I would have thought that the script
RT> below reads and prints a Scheme datum before it may yield to suspension.
RT> -- It doesn't (as of scsh-0.6.2 / Linux kernel 2.4.10). So what's the
RT> right way to protect code from catchable Unix signals?
RT> rthappe
RT> #!/tmp/bin/scsh \
RT> -o low-interrupt -s
RT> !#
RT> ; the struct LOW-INTERRUPT serves the proc REMOVE-INTERRUPT
RT> (with-enabled-interrupts
RT> (remove-interrupt interrupt/tstp (enabled-interrupts))
RT> (display (read))
RT> (newline))
Index: sighandlers.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/sighandlers.scm,v
retrieving revision 1.24
diff -u -c -r1.24 sighandlers.scm
*** sighandlers.scm 26 Jun 2002 10:02:10 -0000 1.24
--- sighandlers.scm 18 Jul 2002 07:45:04 -0000
***************
*** 196,204 ****
(define (deliver-interrupts)
(let lp ((last ((structure-ref sigevents most-recent-sigevent))))
! (let ((event ((structure-ref sigevents next-sigevent-set)
! last full-interrupt-set)))
! (call-interrupt-handler ((structure-ref sigevents sigevent-type) event))
(lp event))))
;;; I am ashamed to say the 33 below is completely bogus.
--- 196,206 ----
(define (deliver-interrupts)
(let lp ((last ((structure-ref sigevents most-recent-sigevent))))
! (let* ((event ((structure-ref sigevents next-sigevent-set)
! last full-interrupt-set))
! (interrupt ((structure-ref sigevents sigevent-type) event)))
! (if (interrupt-enabled? interrupt (enabled-interrupts))
! (call-interrupt-handler interrupt))
(lp event))))
;;; I am ashamed to say the 33 below is completely bogus.
--
Martin ducks and runs away
|