avoid synchronization on this
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Tue, 5 May 2015 09:44:12 +0000 (12:44 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Tue, 5 May 2015 10:38:11 +0000 (13:38 +0300)
java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java

index 2d26c159c324aff34f6844491813c9acf9591087..8a09551ceaa0ee9b37c47148d0ddfd799d16515c 100644 (file)
@@ -137,11 +137,11 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
 
   private final SuspendManagerImpl mySuspendManager = new SuspendManagerImpl(this);
   protected CompoundPositionManager myPositionManager = null;
-  private volatile DebuggerManagerThreadImpl myDebuggerManagerThread;
+  private final DebuggerManagerThreadImpl myDebuggerManagerThread;
   private static final int LOCAL_START_TIMEOUT = 30000;
 
   private final Semaphore myWaitFor = new Semaphore();
-  private boolean myIsFailed = false;
+  private final AtomicBoolean myIsFailed = new AtomicBoolean(false);
   protected DebuggerSession mySession;
   @Nullable protected MethodReturnValueWatcher myReturnValueWatcher;
   private final Disposable myDisposable = Disposer.newDisposable();
@@ -149,6 +149,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
 
   protected DebugProcessImpl(Project project) {
     myProject = project;
+    myDebuggerManagerThread = new DebuggerManagerThreadImpl(myDisposable, myProject);
     myRequestManager = new RequestManagerImpl(this);
     NodeRendererSettings.getInstance().addListener(mySettingsListener);
     loadRenderers();
@@ -887,13 +888,6 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
 
   @Override
   public DebuggerManagerThreadImpl getManagerThread() {
-    if (myDebuggerManagerThread == null) {
-      synchronized (this) {
-        if (myDebuggerManagerThread == null) {
-          myDebuggerManagerThread = new DebuggerManagerThreadImpl(myDisposable, getProject());
-        }
-      }
-    }
     return myDebuggerManagerThread;
   }
 
@@ -1838,14 +1832,10 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb
   }
 
   private void fail() {
-    synchronized (this) {
-      if (myIsFailed) {
-        // need this in order to prevent calling stop() twice
-        return;
-      }
-      myIsFailed = true;
+    // need this in order to prevent calling stop() twice
+    if (myIsFailed.compareAndSet(false, true)) {
+      stop(false);
     }
-    stop(false);
   }
 
   private void createVirtualMachine(final String sessionName, final boolean pollConnection) {