From d471d41232cab47ef6f17bc6ab07b9263c056b21 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 26 Apr 2012 14:07:03 +0400 Subject: [PATCH] Bug fix: MavenMergingUpdateQueue suspend forever if beforeRootsChange comes twice in a row without rootsChanged. --- .../maven/utils/MavenMergingUpdateQueue.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenMergingUpdateQueue.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenMergingUpdateQueue.java index 1a09f4530dc8..da50a2cb2a24 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenMergingUpdateQueue.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenMergingUpdateQueue.java @@ -88,19 +88,21 @@ public class MavenMergingUpdateQueue extends MergingUpdateQueue { }, MavenMergingUpdateQueue.this); ProjectRootManager.getInstance(project).addModuleRootListener(new ModuleRootListener() { - boolean beforeCalled = false; + int beforeCalled; public void beforeRootsChange(ModuleRootEvent event) { - suspend(); - beforeCalled = true; + if (beforeCalled++ == 0) { + suspend(); + } } public void rootsChanged(ModuleRootEvent event) { - if (!beforeCalled) return; - beforeCalled = false; + if (beforeCalled == 0) return; // This may occur if listener has been added between beforeRootsChange() and rootsChanged() calls. - resume(); - MavenMergingUpdateQueue.this.restartTimer(); + if (--beforeCalled == 0) { + resume(); + MavenMergingUpdateQueue.this.restartTimer(); + } } }, MavenMergingUpdateQueue.this); }