Maven: potential race condition fix
authorAnton Makeev <Anton.Makeev@jetbrains.com>
Fri, 12 Mar 2010 15:25:22 +0000 (18:25 +0300)
committerAnton Makeev <Anton.Makeev@jetbrains.com>
Fri, 12 Mar 2010 17:22:14 +0000 (20:22 +0300)
plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java

index 22b401b455a11a5c0da3524944f4c74dd4bce272..f73ccb86389cbb936682f9b7f1139d402166fcc5 100644 (file)
@@ -170,23 +170,25 @@ public class MavenProjectsManager extends SimpleProjectComponent
   }
 
   private void doInit(final boolean isNew) {
-    if (isInitialized.getAndSet(true)) return;
+    synchronized (isInitialized) {
+      if (isInitialized.getAndSet(true)) return;
 
-    initProjectsTree(!isNew);
+      initProjectsTree(!isNew);
 
-    initWorkers();
-    listenForSettingsChanges();
-    listenForProjectsTreeChanges();
+      initWorkers();
+      listenForSettingsChanges();
+      listenForProjectsTreeChanges();
 
-    MavenUtil.runWhenInitialized(myProject, new DumbAwareRunnable() {
-      public void run() {
-        if (!isUnitTestMode()) {
-          fireActivated();
-          listenForExternalChanges();
+      MavenUtil.runWhenInitialized(myProject, new DumbAwareRunnable() {
+        public void run() {
+          if (!isUnitTestMode()) {
+            fireActivated();
+            listenForExternalChanges();
+          }
+          scheduleUpdateAllProjects(isNew);
         }
-        scheduleUpdateAllProjects(isNew);
-      }
-    });
+      });
+    }
   }
 
   private void initProjectsTree(boolean tryToLoadExisting) {
@@ -380,24 +382,26 @@ public class MavenProjectsManager extends SimpleProjectComponent
 
   @Override
   public void projectClosed() {
-    if (!isInitialized.getAndSet(false)) return;
+    synchronized (isInitialized) {
+      if (!isInitialized.getAndSet(false)) return;
 
-    Disposer.dispose(mySchedulesQueue);
-    Disposer.dispose(myImportingQueue);
+      Disposer.dispose(mySchedulesQueue);
+      Disposer.dispose(myImportingQueue);
 
-    myWatcher.stop();
+      myWatcher.stop();
 
-    myReadingProcessor.stop();
-    myResolvingProcessor.stop();
-    myPluginsResolvingProcessor.stop();
-    myFoldersResolvingProcessor.stop();
-    myArtifactsDownloadingProcessor.stop();
-    myPostProcessor.stop();
+      myReadingProcessor.stop();
+      myResolvingProcessor.stop();
+      myPluginsResolvingProcessor.stop();
+      myFoldersResolvingProcessor.stop();
+      myArtifactsDownloadingProcessor.stop();
+      myPostProcessor.stop();
 
-    myEmbeddersManager.release();
+      myEmbeddersManager.release();
 
-    if (isUnitTestMode()) {
-      FileUtil.delete(getProjectsTreesDir());
+      if (isUnitTestMode()) {
+        FileUtil.delete(getProjectsTreesDir());
+      }
     }
   }