diff options
author | Pierre-Charles David | 2015-08-28 12:35:40 +0000 |
---|---|---|
committer | Pierre-Charles David | 2015-08-28 15:21:33 +0000 |
commit | 36e28c09b9232b5201aa4508f375fd21496162a4 (patch) | |
tree | fd11b3c9021150ca7034de7d917fc250b54dd018 | |
parent | 33dd0e9a960ec1f73411ee7059c3beb8806fd328 (diff) | |
download | org.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.java | 15 |
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); } } } |