From 3209fd8099c466bd52a2985a8ca8608cc011c814 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Tue, 26 May 2020 12:03:24 +0800 Subject: [PATCH] avoid flushing or closing outputstream if exchange has completed --- cask/src/cask/main/Main.scala | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index 2294cd88fe..d71df9c631 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -147,7 +147,18 @@ object Main{ response.cookies.foreach(c => exchange.setResponseCookie(Cookie.toUndertow(c))) exchange.setStatusCode(response.statusCode) - response.data.write(exchange.getOutputStream) + val output = exchange.getOutputStream + response.data.write(new java.io.OutputStream { + def write(b: Int): Unit = output.write(b) + override def write(b: Array[Byte]): Unit = output.write(b) + override def write(b: Array[Byte], off: Int, len: Int): Unit = output.write(b, off, len) + override def close() = { + if (!exchange.isComplete) output.close() + } + override def flush() = { + if (!exchange.isComplete) output.flush() + } + }) } def defaultHandleError(routes: Routes,