diff options
Diffstat (limited to 'container-core/src/main/java/com/yahoo/jdisc/http/server')
-rw-r--r-- | container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java index 44daec42b88..4b66715fcf7 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java @@ -76,6 +76,7 @@ class ServletOutputStreamWriter { void writeBuffer(ByteBuffer buf, CompletionHandler handler) { boolean thisThreadShouldWrite = false; + Throwable registrationFailure = null; synchronized (monitor) { if (state == State.FINISHED_OR_ERROR) { @@ -85,8 +86,12 @@ class ServletOutputStreamWriter { responseContentQueue.addLast(new ResponseContentPart(buf, handler)); switch (state) { case NOT_STARTED: - state = State.WAITING_FOR_WRITE_POSSIBLE_CALLBACK; - outputStream.setWriteListener(writeListener); + try { + outputStream.setWriteListener(writeListener); + state = State.WAITING_FOR_WRITE_POSSIBLE_CALLBACK; + } catch (Throwable t) { + registrationFailure = t; + } break; case WAITING_FOR_WRITE_POSSIBLE_CALLBACK: case WRITING_BUFFERS: @@ -99,6 +104,9 @@ class ServletOutputStreamWriter { throw new IllegalStateException("Invalid state " + state); } } + if (registrationFailure != null) { + setFinished(registrationFailure); + } if (thisThreadShouldWrite) { writeBuffersInQueueToOutputStream(); |