diff options
| author | Peter Bex <peter@more-magic.net> | 2017-01-21 14:16:28 +0100 | 
|---|---|---|
| committer | Peter Bex <peter@more-magic.net> | 2017-01-21 14:16:28 +0100 | 
| commit | 961c28aa385d85f5d911369f59dfff703727e5b2 (patch) | |
| tree | a406773477c8faf8d8a91947b63d03f08638cc0f | |
| parent | a7c1af60a7296a008d5cc4fbed9c82afdda01fcd (diff) | |
| download | scsh-process-961c28aa385d85f5d911369f59dfff703727e5b2.tar.gz | |
Clear pending process table on fork.
Thanks to Joerg Wittenberger
| -rw-r--r-- | scsh-process.scm | 21 | 
1 files changed, 15 insertions, 6 deletions
| diff --git a/scsh-process.scm b/scsh-process.scm index 486adb3..df04bf6 100644 --- a/scsh-process.scm +++ b/scsh-process.scm @@ -74,6 +74,9 @@  (define *scsh-pending-processes* (make-hash-table)) +(define (clear-scsh-pending-processes!) +  (set! *scsh-pending-processes* (make-hash-table))) +  (define (add-scsh-pending-process! pid)    (let ((process (make-scsh-process pid #f #f)))      (hash-table-set! *scsh-pending-processes* pid process) @@ -181,12 +184,18 @@      (exit 0)))  (define (fork #!optional thunk continue-threads?) -  (let ((pid (cond-expand -              (has-thread-killer -               (process-fork thunk (not continue-threads?))) -              (else ;; Ignore both args if thunk is #f, so #f won't be applied -               (if thunk (process-fork thunk) (process-fork)))))) -    (and (not (zero? pid)) (add-scsh-pending-process! pid)))) +  (let* ((thunk (and thunk (lambda () +                             (clear-scsh-pending-processes!) +                             (thunk)))) +         (pid (cond-expand +                (has-thread-killer +                 (process-fork thunk (not continue-threads?))) +                (else ;; Ignore both args if thunk is #f, so #f won't be applied +                 (if thunk (process-fork thunk) (process-fork)))))) +    (cond ((zero? pid) +           (clear-scsh-pending-processes!) +           #f) +          (else (add-scsh-pending-process! pid)))))  (define %fork fork) | 
