You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by en...@apache.org on 2021/01/09 23:51:50 UTC

[netbeans] branch master updated: Be sure to remove breakpoint event interceptor, when it wasn't used.

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

entl 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 0535f96  Be sure to remove breakpoint event interceptor, when it wasn't used.
     new 4d92aa6  Merge pull request #2658 from entlicher/EventsInterceptFix
0535f96 is described below

commit 0535f963e33e93411a629b35fd9b2242f00ebbee
Author: Martin Entlicher <ma...@oracle.com>
AuthorDate: Sat Jan 9 20:45:52 2021 +0100

    Be sure to remove breakpoint event interceptor, when it wasn't used.
---
 .../modules/debugger/jpda/truffle/access/TruffleAccess.java    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
index 0a08453..6560dd5 100644
--- a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
+++ b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleAccess.java
@@ -270,17 +270,20 @@ public class TruffleAccess implements JPDABreakpointListener {
         ThreadReference tr = threadImpl.getThreadReference();
         try {
             Method suspendHereMethod = ClassTypeWrapper.concreteMethodByName(debugAccessorClass, METHOD_SUSPEND_HERE, METHOD_SUSPEND_HERE_SGN);
+            JPDADebuggerImpl debugger = threadImpl.getDebugger();
             Value haltInfo;
             Lock writeLock = threadImpl.accessLock.writeLock();
+            Function<EventSet, Boolean> breakpointEventInterceptor = null;
             try {
                 writeLock.lock();
-                skipSuspendedEventClearLeakingReferences(threadImpl.getDebugger(), thread);
+                breakpointEventInterceptor = skipSuspendedEventClearLeakingReferences(debugger, thread);
                 haltInfo = ClassTypeWrapper.invokeMethod(debugAccessorClass, tr, suspendHereMethod, Collections.emptyList(), ObjectReference.INVOKE_SINGLE_THREADED);
             } finally {
+                ((JPDADebuggerImpl) debugger).getOperator().removeEventInterceptor(breakpointEventInterceptor);
                 writeLock.unlock();
             }
             if (haltInfo instanceof ObjectReference) {
-                return (ObjectVariable) threadImpl.getDebugger().getVariable(haltInfo);
+                return (ObjectVariable) debugger.getVariable(haltInfo);
             }
         } catch (InvocationException ex) {
             Exceptions.printStackTrace(ex);
@@ -290,7 +293,7 @@ public class TruffleAccess implements JPDABreakpointListener {
         return null;
     }
 
-    private static void skipSuspendedEventClearLeakingReferences(JPDADebugger debugger, JPDAThread thread) {
+    private static Function<EventSet, Boolean> skipSuspendedEventClearLeakingReferences(JPDADebugger debugger, JPDAThread thread) {
         ThreadReference tr = ((JPDAThreadImpl) thread).getThreadReference();
         MethodBreakpoint clearLeakingReferencesBreakpoint = MethodBreakpoint.create("com.oracle.truffle.api.debug.SuspendedEvent", "clearLeakingReferences");
         clearLeakingReferencesBreakpoint.setBreakpointType(MethodBreakpoint.TYPE_METHOD_ENTRY);
@@ -340,6 +343,7 @@ public class TruffleAccess implements JPDABreakpointListener {
         });
         ((JPDADebuggerImpl) debugger).getOperator().addEventInterceptor(breakpointEventInterceptor);
         DebuggerManager.getDebuggerManager().addBreakpoint(clearLeakingReferencesBreakpoint);
+        return breakpointEventInterceptor;
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

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