This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push: new 9806e8b WICKET-6944 Memory leak in WicketEndpoint 9806e8b is described below commit 9806e8b1b565f0b680c53df0177e8703c05b4b6a Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> AuthorDate: Tue Jan 11 14:21:34 2022 +0200 WICKET-6944 Memory leak in WicketEndpoint Register application listener only once per Application Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org> --- .../java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java index b5b0b2b..3714b7f 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java @@ -20,6 +20,8 @@ import java.io.EOFException; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import jakarta.websocket.CloseReason; @@ -49,6 +51,7 @@ public class WicketEndpoint extends Endpoint private static final String WICKET_APP_PARAM_NAME = "wicket-app-name"; private final AtomicBoolean applicationDestroyed = new AtomicBoolean(false); + private final Set<String> registeredListeners = ConcurrentHashMap.newKeySet(); private JavaxWebSocketProcessor javaxWebSocketProcessor; @@ -58,7 +61,10 @@ public class WicketEndpoint extends Endpoint String appName = getApplicationName(session); WebApplication app = (WebApplication) WebApplication.get(appName); - app.getApplicationListeners().add(new ApplicationListener(applicationDestroyed)); + if (registeredListeners.add(appName)) + { + app.getApplicationListeners().add(new ApplicationListener(applicationDestroyed)); + } try {