diff options
author | Peter Bex <peter@more-magic.net> | 2012-10-06 19:04:41 +0200 |
---|---|---|
committer | Peter Bex <peter@more-magic.net> | 2012-10-06 19:04:41 +0200 |
commit | 2c55a49100192f590fbd4b54312e55f79e27c667 (patch) | |
tree | 1b69d55c43d846eaca1663629c719ffac2941871 /scsh-process.scm | |
parent | 93c713f8c6b0f2c0032e7a80175646607eb6d762 (diff) | |
download | scsh-process-2c55a49100192f590fbd4b54312e55f79e27c667.tar.gz |
Revert back to standard-extension and include a type declaration override for scsh-process to fix bogus optimization of 'signal-handler' due to invalid scrutiny type
Diffstat (limited to 'scsh-process.scm')
-rw-r--r-- | scsh-process.scm | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/scsh-process.scm b/scsh-process.scm index 46fba8d..c6e4337 100644 --- a/scsh-process.scm +++ b/scsh-process.scm @@ -111,22 +111,29 @@ (set-signal-handler! signal/chld - (let ((old-handler (signal-handler signal/chld))) - (lambda (signal) - (for-each (lambda (pid) - (handle-exceptions exn - ;; User might have waited manually - (begin (remove-scsh-pending-process! pid) (void)) - (receive (pid ok? status) - (posix-process-wait pid #t) - (unless (zero? pid) - (let ((p (hash-table-ref *scsh-pending-processes* pid))) - (scsh-process-exit-status-set! p status) - (scsh-process-ok?-set! p ok?) - ;; The GC can clean it up - (remove-scsh-pending-process! pid)))))) - (hash-table-keys *scsh-pending-processes*)) - (when old-handler (old-handler signal)))))) + ;; This workaround fixes the "signal-hander" type in the types.db of 4.8.0 + (let-syntax ((workaround + (cond-expand + (chicken-4.8 + (syntax-rules () + ((_ val) (the (or boolean (procedure (fixnum) . *)) val)))) + (else (syntax-rules () ((_ val) val)))))) + (let ((old-handler (workaround (signal-handler signal/chld)))) + (lambda (signal) + (for-each (lambda (pid) + (handle-exceptions exn + ;; User might have waited manually + (begin (remove-scsh-pending-process! pid) (void)) + (receive (pid ok? status) + (posix-process-wait pid #t) + (unless (zero? pid) + (let ((p (hash-table-ref *scsh-pending-processes* pid))) + (scsh-process-exit-status-set! p status) + (scsh-process-ok?-set! p ok?) + ;; The GC can clean it up + (remove-scsh-pending-process! pid)))))) + (hash-table-keys *scsh-pending-processes*)) + (when old-handler (old-handler signal))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |