From 3173aac06ccf5aa5fd946fa02469699b07cc0eac Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Thu, 19 Oct 2006 07:30:24 +0000 Subject: [PATCH] Refactored timers example to use scheduling executor. --- .../dd/dsf/concurrent/DefaultDsfExecutor.java | 12 ++++++++++-- .../org/eclipse/dd/dsf/concurrent/DsfSequence.java | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) 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); }