From 961393e694b7a6c1cfec529018b856d420ffccb0 Mon Sep 17 00:00:00 2001 From: gregw Date: Thu, 20 Jun 2024 09:17:52 +1000 Subject: [PATCH] Fixed ConnectHandler ICB usage See #11932 --- .../jetty/server/handler/ConnectHandler.java | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java index 76082dbba5f4..a413174e952c 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ConnectHandler.java @@ -726,7 +726,11 @@ private class ProxyIteratingCallback extends IteratingCallback @Override protected Action process() { - buffer = bufferPool.acquire(getInputBufferSize(), true); + if (buffer == null) + buffer = bufferPool.acquire(getInputBufferSize(), true); + else + buffer.clear(); + try { ByteBuffer byteBuffer = buffer.getByteBuffer(); @@ -736,18 +740,18 @@ protected Action process() write(connection.getEndPoint(), byteBuffer, this); return Action.SCHEDULED; } - else if (filled == 0) + + buffer.release(); + buffer = null; + + if (filled == 0) { - buffer.release(); fillInterested(); return Action.IDLE; } - else - { - buffer.release(); - connection.getEndPoint().shutdownOutput(); - return Action.SUCCEEDED; - } + + connection.getEndPoint().shutdownOutput(); + return Action.SUCCEEDED; } catch (IOException x) { @@ -760,26 +764,19 @@ else if (filled == 0) } @Override - public void succeeded() - { - if (LOG.isDebugEnabled()) - LOG.debug("Wrote {} bytes {}", filled, TunnelConnection.this); - buffer.release(); - super.succeeded(); - } - - @Override - protected void onCompleteSuccess() + protected void onAborted(Throwable cause) { + disconnect(cause); } @Override - protected void onCompleteFailure(Throwable x) + protected void onCompleteFailure(Throwable cause) { if (LOG.isDebugEnabled()) - LOG.debug("Failed to write {} bytes {}", filled, TunnelConnection.this, x); + LOG.debug("Failed to write {} bytes {}", filled, TunnelConnection.this, cause); buffer.release(); - disconnect(x); + buffer = null; + disconnect(cause); } private void disconnect(Throwable x)