Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Monnier2017-09-12 15:17:37 +0000
committerPierre-Charles David2017-09-13 09:08:52 +0000
commit8cc9ce0fe1a08659f7313575d73f1ff20c79ba78 (patch)
treef728c03dc221c7a07507de35cd5dd703f86a8344
parenteebfe396b1c39b54952ca61829b5c7f8f9c61458 (diff)
downloadorg.eclipse.sirius-8cc9ce0fe1a08659f7313575d73f1ff20c79ba78.tar.gz
org.eclipse.sirius-8cc9ce0fe1a08659f7313575d73f1ff20c79ba78.tar.xz
org.eclipse.sirius-8cc9ce0fe1a08659f7313575d73f1ff20c79ba78.zip
[522199] Add job join after save to avoid concurrence issues
Addition of a job join after session save in order to wait for the saving to end. Without it, it was possible to modify a resource while it was being saved. Bug: 522199 Signed-off-by: Steve Monnier <steve.monnier@obeo.fr> (cherry picked from commit 8a3c059d1d732bfe51cd9d84d6bed266bcddb5f5) Change-Id: I272ae5edd8f11f573d12d30d82de3481d809f17d
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/DefaultLocalSessionCreationOperation.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/DefaultLocalSessionCreationOperation.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/DefaultLocalSessionCreationOperation.java
index 6d267f4818..7e176abbe3 100644
--- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/DefaultLocalSessionCreationOperation.java
+++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/session/DefaultLocalSessionCreationOperation.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c) 2009, 2017 THALES GLOBAL SERVICES.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -13,10 +13,14 @@ package org.eclipse.sirius.business.api.session;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.util.URI;
import org.eclipse.sirius.business.api.session.factory.SessionFactory;
+import org.eclipse.sirius.business.internal.session.danalysis.SaveSessionJob;
import org.eclipse.sirius.viewpoint.Messages;
+import org.eclipse.sirius.viewpoint.SiriusPlugin;
/**
* A common operation to create a session and open it.
@@ -45,8 +49,7 @@ public class DefaultLocalSessionCreationOperation implements SessionCreationOper
* @param sessionResourceURI
* the {@link URI} of the Resource {@link Session} model
* @param monitor
- * {@link IProgressMonitor} to show progression of
- * {@link Session} creation
+ * {@link IProgressMonitor} to show progression of {@link Session} creation
*/
public DefaultLocalSessionCreationOperation(URI sessionResourceURI, IProgressMonitor monitor) {
this.sessionResourceURI = sessionResourceURI;
@@ -71,6 +74,11 @@ public class DefaultLocalSessionCreationOperation implements SessionCreationOper
session.open(new SubProgressMonitor(monitor, 1));
monitor.subTask(Messages.DAnalysisSessionImpl_saveMsg);
session.save(new SubProgressMonitor(monitor, 1));
+ try {
+ Job.getJobManager().join(SaveSessionJob.FAMILY, new SubProgressMonitor(monitor, 1));
+ } catch (OperationCanceledException | InterruptedException e) {
+ SiriusPlugin.getDefault().error(Messages.AbstractSavingPolicy_savingErrorMsg, e);
+ }
} finally {
monitor.done();
}

Back to the top