EA-70317 - IAE: ConcurrentHashMap.putIfAbsent
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 10 Jul 2015 12:32:51 +0000 (15:32 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Fri, 10 Jul 2015 12:34:42 +0000 (15:34 +0300)
java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java
java/debugger/impl/src/com/intellij/debugger/engine/SuspendContextImpl.java
java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java
java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java
java/debugger/openapi/src/com/intellij/debugger/engine/SuspendContext.java

index 3bbc65d8305ebbd8c07b4a5fe07052168043b320..9c306b31b84edd7a19a67e11115419b9cc4d24ff 100644 (file)
@@ -1668,6 +1668,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
       getSuspendManager().resume(getSuspendContext());
     }
 
+    @Nullable
     public ThreadReferenceProxyImpl getContextThread() {
       return myContextThread;
     }
index 952df87609275328f8803101d68dd9ee1000b00a..4a2c806cff57dac171253aed8ece03d4ae15ed1a 100644 (file)
@@ -137,6 +137,7 @@ public abstract class SuspendContextImpl extends XSuspendContext implements Susp
     }
   }
 
+  @Nullable
   @Override
   public ThreadReferenceProxyImpl getThread() {
     return myThread;
index beadb422e9de8780f44ee2e675e654d2e85b1239..3355f7498af4228a361a384771c80d35d36a4af0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -87,6 +87,7 @@ public final class DebuggerContextImpl implements DebuggerContext {
     return myDebugProcess;
   }
 
+  @Nullable
   public ThreadReferenceProxyImpl getThreadProxy() {
     return myThreadProxy;
   }
index 42d19808729e319c0a9ace54369f00a40f0cd29d..eb0867dbf7da358870ef6e8d37b1da68b7de9383 100644 (file)
@@ -119,7 +119,10 @@ public class DebuggerSession implements AbstractDebuggerSession {
   }
 
   public boolean setSteppingThrough(ThreadReferenceProxyImpl threadProxy) {
-    return mySteppingThroughThreads.add(threadProxy);
+    if (threadProxy != null) {
+      return mySteppingThroughThreads.add(threadProxy);
+    }
+    return false;
   }
 
   @NotNull
@@ -269,7 +272,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
   public void stepOut(int stepSize) {
     final SuspendContextImpl suspendContext = getSuspendContext();
     final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepOutCommand(suspendContext, stepSize);
-    mySteppingThroughThreads.add(cmd.getContextThread());
+    setSteppingThrough(cmd.getContextThread());
     resumeAction(cmd, EVENT_STEP);
   }
 
@@ -280,7 +283,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
   public void stepOver(boolean ignoreBreakpoints, int stepSize) {
     final SuspendContextImpl suspendContext = getSuspendContext();
     final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepOverCommand(suspendContext, ignoreBreakpoints, stepSize);
-    mySteppingThroughThreads.add(cmd.getContextThread());
+    setSteppingThrough(cmd.getContextThread());
     resumeAction(cmd, EVENT_STEP);
   }
 
@@ -291,7 +294,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
   public void stepInto(final boolean ignoreFilters, final @Nullable MethodFilter smartStepFilter, int stepSize) {
     final SuspendContextImpl suspendContext = getSuspendContext();
     final DebugProcessImpl.ResumeCommand cmd = myDebugProcess.createStepIntoCommand(suspendContext, ignoreFilters, smartStepFilter, stepSize);
-    mySteppingThroughThreads.add(cmd.getContextThread());
+    setSteppingThrough(cmd.getContextThread());
     resumeAction(cmd, EVENT_STEP);
   }
 
@@ -302,7 +305,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
   public void runToCursor(@NotNull XSourcePosition position, final boolean ignoreBreakpoints) {
     try {
       DebugProcessImpl.ResumeCommand runToCursorCommand = myDebugProcess.createRunToCursorCommand(getSuspendContext(), position, ignoreBreakpoints);
-      mySteppingThroughThreads.add(runToCursorCommand.getContextThread());
+      setSteppingThrough(runToCursorCommand.getContextThread());
       resumeAction(runToCursorCommand, EVENT_STEP);
     }
     catch (EvaluateException e) {
index be2c891d5fd091ed75aca93614a54fcf655551b3..299a1586fe143a4837b499e4feabb67f5e845bf6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package com.intellij.debugger.engine;
 
 import com.intellij.debugger.engine.jdi.ThreadReferenceProxy;
+import org.jetbrains.annotations.Nullable;
 
 public interface SuspendContext extends StackFrameContext {
   int getSuspendPolicy();
 
+  @Nullable
   ThreadReferenceProxy getThread();
 }