diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java index b61924ca4547..d3d59ca1802c 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java @@ -371,11 +371,11 @@ public void onFillable() { while (getEndPoint().isOpen()) { - if (LOG.isDebugEnabled()) - LOG.debug("onFillable fill and parse {} {} {}", this, _httpChannel, _retainableByteBuffer); - // Fill the request buffer (if needed). int filled = fillRequestBuffer(); + if (LOG.isDebugEnabled()) + LOG.debug("onFillable filled {} {} {} {}", filled, this, _httpChannel, _retainableByteBuffer); + if (filled < 0 && getEndPoint().isOutputShutdown()) close(); @@ -1523,12 +1523,17 @@ public void succeeded() return; } + // As this is not an upgrade, we can shutdown the output if we know we are not persistent + if (_sendCallback._shutdownOut) + getEndPoint().shutdownOutput(); + _httpChannel.recycle(); + + // If a 100 Continue is still expected to be sent, but no content was read, then + // close the parser so that seeks EOF below, not the next request. if (_expects100Continue) { - // No content was read, and no 100 Continue response was sent. - // Close the parser so that below it seeks EOF, not the next request. _expects100Continue = false; _parser.close(); } @@ -1541,7 +1546,6 @@ public void succeeded() else _parser.close(); } - _generator.reset(); // Can the onFillable thread continue processing @@ -1552,9 +1556,6 @@ public void succeeded() if (LOG.isDebugEnabled()) LOG.debug("non-current completion {}", this); - if (_sendCallback._shutdownOut) - getEndPoint().shutdownOutput(); - // If we are looking for the next request if (_parser.isStart()) { diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java index 8f1c60271b1a..dad6703e3543 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java @@ -200,7 +200,7 @@ public boolean handle(Request request, Response response, Callback callback) } }); - try (Socket client = newSocket(_serverURI.getHost(), _serverURI.getPort())) + try (StacklessLogging ignored = new StacklessLogging(Response.class); Socket client = newSocket(_serverURI.getHost(), _serverURI.getPort())) { OutputStream os = client.getOutputStream(); @@ -233,7 +233,7 @@ public boolean handle(Request request, Response response, Callback callback) thr } }); - try (Socket client = newSocket(_serverURI.getHost(), _serverURI.getPort())) + try (StacklessLogging ignored = new StacklessLogging(Response.class); Socket client = newSocket(_serverURI.getHost(), _serverURI.getPort())) { OutputStream os = client.getOutputStream(); @@ -1669,12 +1669,10 @@ public void testWriteBodyAfterNoBodyResponse() throws Exception BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String line = in.readLine(); - System.err.println(line); assertThat(line, containsString(" 304 ")); while (true) { line = in.readLine(); - System.err.println(line); if (line == null) throw new EOFException(); if (line.length() == 0) @@ -1685,7 +1683,6 @@ public void testWriteBodyAfterNoBodyResponse() throws Exception assertThat(line, not(containsString("Transfer-Encoding"))); } - System.err.println("---"); line = in.readLine(); assertThat(line, containsString(" 304 ")); while (true)