You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2022/01/11 12:23:49 UTC

[wicket] branch wicket-8.x updated: WICKET-6944 Memory leak in WicketEndpoint

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-8.x by this push:
     new 6e6d2e9  WICKET-6944 Memory leak in WicketEndpoint
6e6d2e9 is described below

commit 6e6d2e96c06765a534abd8199fed8fcdf2a0b7a0
Author: Martin Tzvetanov Grigorov <mg...@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 <mg...@apache.org>
    (cherry picked from commit 9806e8b1b565f0b680c53df0177e8703c05b4b6a)
---
 .../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 0636831..90bdb51 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 javax.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
 		{