Skip to content
Snippets Groups Projects
Commit f11afd0e authored by Simon Barner's avatar Simon Barner
Browse files

Refresh top level elements only after modelFileChangesJob has finished

* Avoids a deadlock with the EclipseResourceStorageService

Issue-Ref: 4166
Issue-Url: af3#4166



Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent c86a8bea
No related branches found
No related tags found
No related merge requests found
Pipeline #31576 canceled
Pipeline: maven-releng

#31577

    AutoUndoCommandStack.java fc326adf66c6cea2354884cdc240da5f2f82689a GREEN
    EMFTransactionalCommand.java ba4b5bead9768b6ce6c955b9238cd96cb722533c GREEN
    EclipseResourceStorageService.java e917c822c53eacada70188e66215d91241a29a5c GREEN
    EclipseResourceStorageService.java 5e60ef7628ea2ad4113cfebde939341e1b1f6cf2 YELLOW
    ModelContext.java 76eeaef7f56da5f0e288cf96792850be606b7757 YELLOW
    NonDirtyingEMFTransactionalCommand.java d288ebe35d22442c603496b0c917fb99a8febeea GREEN
    ......@@ -49,6 +49,8 @@ import org.eclipse.core.runtime.IConfigurationElement;
    import org.eclipse.core.runtime.IProgressMonitor;
    import org.eclipse.core.runtime.IStatus;
    import org.eclipse.core.runtime.Status;
    import org.eclipse.core.runtime.jobs.IJobChangeEvent;
    import org.eclipse.core.runtime.jobs.JobChangeAdapter;
    import org.eclipse.emf.common.util.URI;
    import org.eclipse.emf.ecore.EObject;
    import org.eclipse.emf.ecore.resource.Resource;
    ......@@ -202,10 +204,10 @@ public class EclipseResourceStorageService
    /** Runs resource change job as workspace job. */
    private void runWorkspaceChangeJob(final IFile file, final int changeKind) {
    new WorkspaceJob("ModelFileChangedJob") {
    WorkspaceJob modelFileChangesJob = new WorkspaceJob("ModelFileChangedJob") {
    @Override
    public IStatus runInWorkspace(IProgressMonitor monitor) {
    IPersistencyService ps = IPersistencyService.getInstance();
    synchronized(EclipseResourceStorageService.this) {
    // Model file that is managed by kernel has been changed
    if(checkLocationProvider(file)) {
    ......@@ -218,11 +220,10 @@ public class EclipseResourceStorageService
    loadContext(file);
    }
    }
    // Refresh the top-level elements
    ps.refreshTopLevelElements(EclipseResourceStorageService.this);
    } else if(changeKind == REMOVED) {
    // A file has been removed. Remove it from one of the ResourceSets owned by
    // the kernel.
    IPersistencyService ps = IPersistencyService.getInstance();
    for(ITopLevelElement topLevelElement : ps.getTopLevelElements()) {
    final ResourceSet resourceSet = topLevelElement.getResourceSet();
    final List<Resource> toRemove = new ArrayList<Resource>();
    ......@@ -256,7 +257,19 @@ public class EclipseResourceStorageService
    }
    return Status.OK_STATUS;
    }
    }.schedule();
    };
    // Refresh top level elements after modelFileChangesJob has finished in order to avoid
    // a deadlock with the EclipseResourceStorageService
    modelFileChangesJob.addJobChangeListener(new JobChangeAdapter() {
    @Override
    public void done(IJobChangeEvent event) {
    IPersistencyService ps = IPersistencyService.getInstance();
    ps.refreshTopLevelElements(EclipseResourceStorageService.this);
    }
    });
    modelFileChangesJob.schedule();
    }
    /** Returns whether the given file has been loaded by this manager. */
    ......@@ -380,9 +393,8 @@ public class EclipseResourceStorageService
    /** {@inheritDoc} */
    @Override
    public IIntrospectionDetailsItem getDetailsItem() {
    return new EclipseResourceStorageKISSDetailsItem(
    unmodifiableList(storageProviderList), unmodifiableSet(loadedContexts.keySet()),
    unmodifiableList(errorFiles));
    return new EclipseResourceStorageKISSDetailsItem(unmodifiableList(storageProviderList),
    unmodifiableSet(loadedContexts.keySet()), unmodifiableList(errorFiles));
    }
    /** {@inheritDoc} */
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment