diff --git a/runtime/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF b/runtime/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF index d3660e7a869..934ea90cec8 100644 --- a/runtime/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF +++ b/runtime/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.core.jobs; singleton:=true -Bundle-Version: 3.15.500.qualifier +Bundle-Version: 3.16.0.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: org.eclipse.core.internal.jobs;x-internal:=true, diff --git a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java index fbfb8c7e779..3e99c96bcd1 100644 --- a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java +++ b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/LockManager.java @@ -109,6 +109,15 @@ public boolean aboutToWait(Thread lockOwner) { return false; } + public boolean isUI() { + try { + return lockListener.isUI(); + } catch (Exception | LinkageError e) { + handleException(e); + } + return false; + } + /** * This thread has just acquired a lock. Update graph. */ diff --git a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java index a7e50344b5b..b191d5e7ef2 100644 --- a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java +++ b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/ThreadJob.java @@ -208,7 +208,7 @@ static ThreadJob joinRun(ThreadJob threadJob, IProgressMonitor monitor) { boolean interruptedDuringWaitForRun; try { // just return if lock listener decided to grant immediate access - if (manager.getLockManager().aboutToWait(blocker)) { + if (manager.getLockManager().aboutToWait(blocker) || manager.getLockManager().isUI()) { return threadJob; } result = waitForRun(threadJob, monitor, blockingJob); diff --git a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/runtime/jobs/LockListener.java b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/runtime/jobs/LockListener.java index a2a31926d9c..10cbb16c7a3 100644 --- a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/runtime/jobs/LockListener.java +++ b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/runtime/jobs/LockListener.java @@ -46,6 +46,12 @@ public boolean aboutToWait(Thread lockOwner) { return false; } + /** + * @since 3.16 + */ + public boolean isUI() { + return false; + } /** * Notification that a thread is about to release a lock. *