aboutsummaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-11-16 16:56:17 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-11-16 16:56:17 +0100
commit42158d9232b293c7315583b2633c55d2a914069f (patch)
treeb77e4c0968d885bdc03d07da21488d4057435851 /container-core
parent64eeebf13aac84641830bbda59f039411bcda495 (diff)
Fail response writing if unable to register listener
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ServletOutputStreamWriter.java12
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();