diff options
| author | Steve Monnier | 2017-09-12 15:17:37 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2017-09-13 09:08:52 +0000 |
| commit | 8cc9ce0fe1a08659f7313575d73f1ff20c79ba78 (patch) | |
| tree | f728c03dc221c7a07507de35cd5dd703f86a8344 | |
| parent | eebfe396b1c39b54952ca61829b5c7f8f9c61458 (diff) | |
| download | org.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.java | 14 |
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(); } |
