Change CLOSE-PORT to close the output side of an I/O port before it
authorChris Hanson <org/chris-hanson/cph>
Fri, 21 Apr 1995 19:58:06 +0000 (19:58 +0000)
committerChris Hanson <org/chris-hanson/cph>
Fri, 21 Apr 1995 19:58:06 +0000 (19:58 +0000)
closes the input side.  This matters when the same file channel is
shared by both sides, and there is buffered data that must be flushed
before the close.

v7/src/runtime/genio.scm

index e5f0a0c8e70389279b30f3689dfdcfe67322fdc7..e8579f3ef21419bfd845a1c5f44a9d5c924379e1 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: genio.scm,v 1.4 1995/04/14 19:06:09 cph Exp $
+$Id: genio.scm,v 1.5 1995/04/21 19:58:06 cph Exp $
 
 Copyright (c) 1991-95 Massachusetts Institute of Technology
 
@@ -279,7 +279,12 @@ MIT in each case. |#
     (else (error:wrong-type-datum mode "terminal mode"))))
 
 (define (operation/close port)
-  (let ((input-buffer (port/input-buffer port)))
-    (if input-buffer (input-buffer/close input-buffer)))
+  ;; Must close output-buffer first, because it may need to flush
+  ;; buffered data, and there might only be one channel for both the
+  ;; input and output buffers.
   (let ((output-buffer (port/output-buffer port)))
-    (if output-buffer (output-buffer/close output-buffer))))
\ No newline at end of file
+    (if output-buffer
+       (output-buffer/close output-buffer)))
+  (let ((input-buffer (port/input-buffer port)))
+    (if input-buffer
+       (input-buffer/close input-buffer))))
\ No newline at end of file