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

skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 3927637  Remove a possibly staled debugger listener on finish.
     new 5ef015f  Merge pull request #3048 from 
entlicher/lsp_StaledDebuggerListener
3927637 is described below

commit 3927637f1ab20e202bb7eecd07a507ab56af9337
Author: Martin Entlicher <[email protected]>
AuthorDate: Wed Jul 14 02:50:13 2021 +0200

    Remove a possibly staled debugger listener on finish.
---
 .../lsp/server/debugging/launch/NbLaunchDelegate.java    | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
index c6304c0..fda979e 100644
--- 
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
+++ 
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
@@ -31,6 +31,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
@@ -49,6 +50,7 @@ import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.annotations.common.NullAllowed;
 import org.netbeans.api.debugger.DebuggerManager;
 import org.netbeans.api.debugger.DebuggerManagerAdapter;
+import org.netbeans.api.debugger.DebuggerManagerListener;
 import org.netbeans.api.debugger.Session;
 import org.netbeans.api.debugger.jpda.JPDADebugger;
 import org.netbeans.api.extexecution.base.ExplicitProcessParameters;
@@ -104,13 +106,18 @@ import org.openide.util.lookup.ProxyLookup;
 public abstract class NbLaunchDelegate {
 
     private final RequestProcessor requestProcessor = new 
RequestProcessor(NbLaunchDelegate.class);
+    private final Map<DebugAdapterContext, DebuggerManagerListener> 
debuggerListeners = new ConcurrentHashMap<>();
 
     public abstract void preLaunch(Map<String, Object> launchArguments, 
DebugAdapterContext context);
 
     public abstract void postLaunch(Map<String, Object> launchArguments, 
DebugAdapterContext context);
     
     protected void notifyFinished(DebugAdapterContext ctx, boolean success) {
-        // no op.
+        // Remove a possibly staled debugger listener
+        DebuggerManagerListener listener = debuggerListeners.remove(ctx);
+        if (listener != null) {
+            
DebuggerManager.getDebuggerManager().removeDebuggerListener(listener);
+        }
     }
 
     public final CompletableFuture<Void> nbLaunch(FileObject toRun, File 
nativeImageFile, String method, Map<String, Object> launchArguments, 
DebugAdapterContext context, boolean debug, boolean testRun, 
Consumer<NbProcessConsole.ConsoleMessage> consoleMessages) {
@@ -266,12 +273,13 @@ public abstract class NbLaunchDelegate {
 
                 context.setInputSinkProvider(() -> writer);
                 if (debug) {
-                    
DebuggerManager.getDebuggerManager().addDebuggerListener(new 
DebuggerManagerAdapter() {
+                    DebuggerManagerListener listener = new 
DebuggerManagerAdapter() {
                         @Override
                         public void sessionAdded(Session session) {
                             JPDADebugger debugger = session.lookupFirst(null, 
JPDADebugger.class);
                             if (debugger != null) {
                                 
DebuggerManager.getDebuggerManager().removeDebuggerListener(this);
+                                debuggerListeners.remove(context);
                                 Map properties = session.lookupFirst(null, 
Map.class);
                                 NbSourceProvider sourceProvider = 
context.getSourceProvider();
                                 sourceProvider.setSourcePath(properties != 
null ? (ClassPath) properties.getOrDefault("sourcepath", ClassPath.EMPTY) : 
ClassPath.EMPTY);
@@ -290,7 +298,9 @@ public abstract class NbLaunchDelegate {
                                 });
                             }
                         }
-                    });
+                    };
+                    
DebuggerManager.getDebuggerManager().addDebuggerListener(listener);
+                    debuggerListeners.put(context, listener);
                 }
                 Lookups.executeWith(launchCtx, () -> {
                     
providerAndCommand.first().invokeAction(providerAndCommand.second(), lookup);

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to