From 0b4b65f50b7853b7ffb13381f22e0561a24e374f Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Sat, 22 Jun 2024 15:32:38 +1000 Subject: [PATCH] PR #32097 - changes to address reviews for websocket Signed-off-by: Lachlan Roberts --- .../reactive/bootstrap/JettyCoreHttpServer.java | 6 ++---- .../socket/adapter/JettyWebSocketSession.java | 12 ++++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/bootstrap/JettyCoreHttpServer.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/bootstrap/JettyCoreHttpServer.java index ba1a085ebcec..488e0e429ef9 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/bootstrap/JettyCoreHttpServer.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/server/reactive/bootstrap/JettyCoreHttpServer.java @@ -21,7 +21,7 @@ import org.eclipse.jetty.io.ArrayByteBufferPool; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.websocket.server.WebSocketUpgradeHandler; +import org.eclipse.jetty.websocket.server.ServerWebSocketContainer; import org.springframework.http.server.reactive.JettyCoreHttpHandlerAdapter; @@ -51,9 +51,7 @@ protected void initServer() { this.jettyServer.addConnector(connector); this.jettyServer.setHandler(createHandlerAdapter()); - // TODO: We don't actually want the upgrade handler but this will create the WebSocketContainer. - // This requires a change in Jetty. - WebSocketUpgradeHandler.from(jettyServer); + ServerWebSocketContainer.ensure(jettyServer); } private JettyCoreHttpHandlerAdapter createHandlerAdapter() { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketSession.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketSession.java index 0b514623a094..35aeac20a808 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketSession.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/adapter/JettyWebSocketSession.java @@ -84,8 +84,14 @@ public JettyWebSocketSession(Session session, HandshakeInfo info, DataBufferFact this.lock.lock(); try { this.requested = Math.addExact(this.requested, n); + if (this.requested < 0L) { + this.requested = Long.MAX_VALUE; + } + if (!this.awaitingMessage && this.requested > 0) { - this.requested--; + if (this.requested != Long.MAX_VALUE) { + this.requested--; + } this.awaitingMessage = true; demand = true; } @@ -113,7 +119,9 @@ void handleMessage(WebSocketMessage message) { } this.awaitingMessage = false; if (this.requested > 0) { - this.requested--; + if (this.requested != Long.MAX_VALUE) { + this.requested--; + } this.awaitingMessage = true; demand = true; }