I am setting up a dedicated output stream between Swank and the client, with *use-dedicated-output-stream* set to T. I discovered that the open-streams function of swank apparently loose an open stream if *use-dedicated-output-stream* is non-nil:
(let* ([...] (dedicated-output (if *use-dedicated-output-stream* (open-dedicated-output-stream (connection.socket-io connection)))) (out (make-output-stream output-fn)) (in (make-input-stream input-fn)) (out (or dedicated-output out)) <--- (io (make-two-way-stream in out)) (repl-results (make-output-stream-for-target connection :repl-result))) (when (eq (connection.communication-style connection) :spawn) (setf (connection.auto-flush-thread connection) (spawn (lambda () (auto-flush-loop out)) :name "auto-flush-thread"))) (values dedicated-output in out io repl-results)))
I suppose this isn't intentional? Here is a candidate patch that avoids creating the output stream if there is a stream for dedicated- output:
diff -u slime-2009-06-28/swank.lisp slime-2009-06-28+/swank.lisp --- slime-2009-06-28/swank.lisp 2009-06-25 00:15:03.000000000 -0700 +++ slime-2009-06-28+/swank.lisp 2009-06-28 18:17:56.000000000 -0700 @@ -905,9 +905,8 @@ (dedicated-output (if *use-dedicated-output-stream* (open-dedicated-output-stream (connection.socket-io connection)))) - (out (make-output-stream output-fn)) (in (make-input-stream input-fn)) - (out (or dedicated-output out)) + (out (or dedicated-output (make-output-stream output-fn))) (io (make-two-way-stream in out)) (repl-results (make-output-stream-for-target connection :repl-result)))
-- Terje Norderhaug
Terje Norderhaug terje@in-progress.com writes:
I am setting up a dedicated output stream between Swank and the client, with *use-dedicated-output-stream* set to T. I discovered that the open-streams function of swank apparently loose an open stream if *use-dedicated-output-stream* is non-nil:
(let* ([...] (dedicated-output (if *use-dedicated-output-stream* (open-dedicated-output-stream (connection.socket-io connection)))) (out (make-output-stream output-fn)) (in (make-input-stream input-fn)) (out (or dedicated-output out)) <--- (io (make-two-way-stream in out)) (repl-results (make-output-stream-for-target connection :repl-result))) (when (eq (connection.communication-style connection) :spawn) (setf (connection.auto-flush-thread connection) (spawn (lambda () (auto-flush-loop out)) :name "auto-flush-thread"))) (values dedicated-output in out io repl-results)))
I suppose this isn't intentional? Here is a candidate patch that avoids creating the output stream if there is a stream for dedicated- output:
diff -u slime-2009-06-28/swank.lisp slime-2009-06-28+/swank.lisp --- slime-2009-06-28/swank.lisp 2009-06-25 00:15:03.000000000 -0700 +++ slime-2009-06-28+/swank.lisp 2009-06-28 18:17:56.000000000 -0700 @@ -905,9 +905,8 @@ (dedicated-output (if *use-dedicated-output-stream* (open-dedicated-output-stream (connection.socket-io connection))))
(out (make-output-stream output-fn)) (in (make-input-stream input-fn))
(out (or dedicated-output out))
(out (or dedicated-output (make-output-stream output-fn))) (io (make-two-way-stream in out)) (repl-results (make-output-stream-for-target connection :repl-result)))
You are right, committed. Thanks.