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/03/22 11:47:47 UTC

[wicket] 01/01: WICKET-6965 Memory leak in WicketEndpoint

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

mgrigorov pushed a commit to branch wicket-6944-make-application-listeners-static
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit f333ec0ff16e56756433ff66a4f5ddd12b1a984b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Tue Mar 22 13:46:35 2022 +0200

    WICKET-6965 Memory leak in WicketEndpoint
    
    Make WicketEndpoint#REGISTERED_LISTENERS a static field.
    Unregister the listener at Application#onBeforeDestroyed()
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
 .../java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java   | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

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 40ba7d4..88df66a 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
@@ -46,13 +46,14 @@ public class WicketEndpoint extends Endpoint
 
 	private static final Logger LOG = LoggerFactory.getLogger(WicketEndpoint.class);
 
+	private static final Set<String> REGISTERED_LISTENERS = ConcurrentHashMap.newKeySet();
+
 	/**
 	 * The name of the request parameter that holds the application name
 	 */
 	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;
 
@@ -62,7 +63,7 @@ public class WicketEndpoint extends Endpoint
 		String appName = getApplicationName(session);
 
 		WebApplication app = (WebApplication) WebApplication.get(appName);
-		if (registeredListeners.add(appName))
+		if (REGISTERED_LISTENERS.add(appName))
 		{
 			app.getApplicationListeners().add(new ApplicationListener(applicationDestroyed));
 		}
@@ -172,6 +173,8 @@ public class WicketEndpoint extends Endpoint
 		public void onBeforeDestroyed(Application application)
 		{
 			applicationDestroyed.set(true);
+			REGISTERED_LISTENERS.remove(application.getName());
+			application.getApplicationListeners().remove(this);
 		}
 	}
 }