Fix bug in Windows 95: when a subprocess exits, close its I/O ports.
authorChris Hanson <org/chris-hanson/cph>
Thu, 8 Jan 1998 05:59:11 +0000 (05:59 +0000)
committerChris Hanson <org/chris-hanson/cph>
Thu, 8 Jan 1998 05:59:11 +0000 (05:59 +0000)
This is necessary because our code can get into a state where it is
trying to read from a subprocess pipe and needs to be told that the
other end of the pipe was closed.  This indication is supplied by
Windows NT, but does not appear to work properly under Windows 95.

v7/src/runtime/io.scm
v7/src/runtime/process.scm
v7/src/runtime/runtime.pkg
v8/src/runtime/runtime.pkg

index 75d17d65241629a10bb8de70942413f0f180fa26..b9335d56a01b0f42c62335c6709d5f2adc3392d5 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Id: io.scm,v 14.52 1998/01/08 05:58:22 cph Exp $
+$Id: io.scm,v 14.53 1998/01/08 05:58:35 cph Exp $
 
-Copyright (c) 1988-97 Massachusetts Institute of Technology
+Copyright (c) 1988-98 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
index 14665d98573e52c5a9391827eacda9cbe1822f6e..7471888254eaed93c74562e9319f1e7864817c6a 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Id: process.scm,v 1.20 1997/10/24 06:47:56 cph Exp $
+$Id: process.scm,v 1.21 1998/01/08 05:58:54 cph Exp $
 
-Copyright (c) 1989-97 Massachusetts Institute of Technology
+Copyright (c) 1989-98 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -128,6 +128,9 @@ MIT in each case. |#
     (and (output-port? port)
         port)))
 
+(define (close-subprocess-i/o process)
+  (without-interrupts (lambda () (%close-subprocess-i/o process))))
+
 (define (%close-subprocess-i/o process)
   ;; Assumes that interrupts are locked.
   (cond ((subprocess-%i/o-port process)
@@ -268,7 +271,7 @@ MIT in each case. |#
     ((2) 'EXITED)
     ((3) 'SIGNALLED)
     (else (error "Illegal process status:" status))))
-\f
+
 (define (subprocess-job-control-status process)
   (let ((n
         ((ucode-primitive process-job-control-status 1)
@@ -279,6 +282,13 @@ MIT in each case. |#
       ((2) 'NO-JOB-CONTROL)
       ((3) 'JOB-CONTROL)
       (else (error "Illegal process job-control status:" n)))))
+\f
+(define (handle-subprocess-status-change)
+  (if (eq? 'NT microcode-id/operating-system)
+      (for-each (lambda (process)
+                 (if (memq (subprocess-status process) '(EXITED SIGNALLED))
+                     (close-subprocess-i/o process)))
+               subprocesses)))
 
 (define-integrable subprocess-job-control-available?
   (ucode-primitive os-job-control? 0))
@@ -305,7 +315,7 @@ MIT in each case. |#
 
 (define (maybe-close-subprocess-i/o process)
   (if (eq? 'NT microcode-id/operating-system)
-      (without-interrupts (lambda () (%close-subprocess-i/o process)))))
+      (close-subprocess-i/o process)))
 
 (define (subprocess-stop process)
   ((ucode-primitive process-stop 1) (subprocess-index process)))
index 8a64912242eaf0afd266317b84dc6a8886f4b625..cf37f0d7ebe2b88c8d6a708a97948cdc7d81be2f 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Id: runtime.pkg,v 14.288 1997/11/01 07:36:14 cph Exp $
+$Id: runtime.pkg,v 14.289 1998/01/08 05:59:11 cph Exp $
 
-Copyright (c) 1988-97 Massachusetts Institute of Technology
+Copyright (c) 1988-98 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -2328,6 +2328,8 @@ MIT in each case. |#
          subprocess-stop
          subprocess-wait
          subprocess?)
+  (export (runtime primitive-io)
+         handle-subprocess-status-change)
   (initialization (initialize-package!)))
 
 (define-package (runtime graphics)
index 1c72e52a33fd3983abfebb311f3600673134c544..1efbce4a745b0170251ea3af14ab1ee00d9ad0e0 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Id: runtime.pkg,v 14.294 1997/11/01 07:35:47 cph Exp $
+$Id: runtime.pkg,v 14.295 1998/01/08 05:59:01 cph Exp $
 
-Copyright (c) 1988-97 Massachusetts Institute of Technology
+Copyright (c) 1988-98 Massachusetts Institute of Technology
 
 This material was developed by the Scheme project at the Massachusetts
 Institute of Technology, Department of Electrical Engineering and
@@ -2332,6 +2332,8 @@ MIT in each case. |#
          subprocess-stop
          subprocess-wait
          subprocess?)
+  (export (runtime primitive-io)
+         handle-subprocess-status-change)
   (initialization (initialize-package!)))
 
 (define-package (runtime graphics)