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 <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>
    (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
                {

Reply via email to