Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2015-08-28 12:35:40 +0000
committerPierre-Charles David2015-08-28 15:21:33 +0000
commit36e28c09b9232b5201aa4508f375fd21496162a4 (patch)
treefd11b3c9021150ca7034de7d917fc250b54dd018
parent33dd0e9a960ec1f73411ee7059c3beb8806fd328 (diff)
downloadorg.eclipse.sirius-36e28c09b9232b5201aa4508f375fd21496162a4.tar.gz
org.eclipse.sirius-36e28c09b9232b5201aa4508f375fd21496162a4.tar.xz
org.eclipse.sirius-36e28c09b9232b5201aa4508f375fd21496162a4.zip
[475834] Avoid re-entrant ResourceSetSync notifications
Bug: 475834 Change-Id: I72aba92fe096d2a3db503ae656a2ad59614779df Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/resource/ResourceSetSync.java15
1 files changed, 12 insertions, 3 deletions
diff --git a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/resource/ResourceSetSync.java b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/resource/ResourceSetSync.java
index 9ebb8945cf..3de3c45705 100644
--- a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/resource/ResourceSetSync.java
+++ b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/resource/ResourceSetSync.java
@@ -19,6 +19,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspace;
@@ -85,6 +86,8 @@ public final class ResourceSetSync extends ResourceSetListenerImpl implements Re
private Collection<Resource> savedResources = Sets.newLinkedHashSet();
private final ArrayList<IFileModificationValidator> fileModificationValidators;
+
+ private final AtomicBoolean notificationInProgress = new AtomicBoolean(false);
/**
* The {@link ResourceStatus} represents the in memory status of a resource
@@ -361,9 +364,15 @@ public final class ResourceSetSync extends ResourceSetListenerImpl implements Re
}
private void notifyClientsInBatch(Collection<ResourceStatusChange> changes) {
- if (notificationIsRequired && changes.size() > 0) {
- for (final ResourceSyncClient client : Lists.newArrayList(clients)) {
- client.statusesChanged(changes);
+ if (notificationInProgress.compareAndSet(false, true)) {
+ try {
+ if (notificationIsRequired && changes.size() > 0) {
+ for (final ResourceSyncClient client : Lists.newArrayList(clients)) {
+ client.statusesChanged(changes);
+ }
+ }
+ } finally {
+ notificationInProgress.set(false);
}
}
}

Back to the top