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 <mgrigo...@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 <mgrigo...@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); } } }