diff --git a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DefaultDsfExecutor.java b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DefaultDsfExecutor.java index 436568ef959..1cbc1e25901 100644 --- a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DefaultDsfExecutor.java +++ b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DefaultDsfExecutor.java @@ -66,12 +66,20 @@ public class DefaultDsfExecutor extends ScheduledThreadPoolExecutor if (r instanceof Future) { Future future = (Future)r; try { - future.get(); + /* + * Try to retrieve the value, which should throw exception in + * case when exception was thrown within the Runnable/Callable. + * Must call isDone(), because scheduled futures would block + * on get. + */ + if (future.isDone()) { + future.get(); + } } catch (InterruptedException e) { // Ignore } catch (CancellationException e) { // Ignore also } catch (ExecutionException e) { if (e.getCause() != null) { - logException(t); + logException(e.getCause()); } } } diff --git a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DsfSequence.java b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DsfSequence.java index e6794500f36..ee1dfc7853f 100644 --- a/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DsfSequence.java +++ b/plugins/org.eclipse.dd.dsf/src/org/eclipse/dd/dsf/concurrent/DsfSequence.java @@ -369,7 +369,7 @@ abstract public class DsfSequence extends DsfRunnable implements Future if (fRollbackTaskName != null) { fProgressMonitor.subTask(fRollbackTaskName); } - fStatus = new Status(IStatus.CANCEL, DsfPlugin.PLUGIN_ID, "Sequence \"" + fTaskName + "\" cancelled."); + fStatus = new Status(IStatus.CANCEL, DsfPlugin.PLUGIN_ID, -1, "Sequence \"" + fTaskName + "\" cancelled.", null); if (fDone != null) { fDone.setStatus(fStatus); }