M: fd refill [ buffered-port check-instance buffer>> ] [ fd>> ] bi* over [ buffer-end ] [ buffer-capacity ] bi "fd: " gwrite pick number>string gwrite " reading: " gwrite dup number>string gwrite read " ret: " gwrite dup number>string gwrite { fixnum } declare dup 0 >= [ swap buffer+ f "\n" gwrite ] [ " errno2: " gwrite errno g. errno { { EINTR [ 2drop +retry+ ] } { EAGAIN [ 2drop +input+ ] } [ (throw-errno) ] } case ] if gflush ; M: unix (wait-to-read) dup dup handle>> check-disposed refill dup - [ dupd wait-for-port (wait-to-read) ] [ 2drop ] if ; + [ dupd wait-for-port (wait-to-read) ] [ 2drop "HERE" g. gflush yield ] if ; ! Writers M: fd drain diff --git a/basis/io/ports/ports.factor b/basis/io/ports/ports.factor index 82801f21eb..a9e176f805 100644 --- a/basis/io/ports/ports.factor +++ b/basis/io/ports/ports.factor @@ -147,7 +147,7 @@ M: output-port stream-write1 n-write src >c-ptr n-chunk buffer buffer-write n-remaining n-chunk fixnum-fast dup 0 > [ - src swap port n-write n-chunk fixnum+fast port-write + src swap port n-write n-chunk fixnum+fast yield port-write ] [ drop ] if ; inline recursive