From db1ea19ba84fcaf1da46b26c6d9b51fd0aa706cf Mon Sep 17 00:00:00 2001 From: Francois Chouinard Date: Wed, 13 Oct 2010 21:28:02 +0000 Subject: [PATCH] 2010-10-13 Francois Chouinard Fix for Bug327711 * src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java : Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java: Added checks for disposed widget * src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java : Added checks for disposed widget * src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java: Added checks for disposed widget * src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java: Added checks for disposed widget * src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java: Added checks for disposed widget * src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java: Added checks for disposed widget --- org.eclipse.linuxtools.lttng.ui/ChangeLog | 10 +++- .../ui/views/common/AbsTimeUpdateView.java | 12 ++-- .../ui/views/controlflow/ControlFlowView.java | 57 ++++++++++--------- .../ui/views/histogram/HistogramCanvas.java | 12 ++-- .../histogram/ParentHistogramCanvas.java | 6 +- .../ui/views/histogram/TimeTextGroup.java | 22 +++++-- .../lttng/ui/views/project/ProjectView.java | 2 +- .../ui/views/resources/ResourcesView.java | 18 +++--- .../ui/views/statistics/StatisticsView.java | 25 +++++--- .../ui/views/timeframe/SpinnerGroup.java | 4 +- .../ui/views/timeframe/TimeFrameView.java | 3 + org.eclipse.linuxtools.tmf.ui/ChangeLog | 3 +- .../tmf/ui/viewers/events/TmfEventsTable.java | 11 ++-- .../tmf/ui/views/project/ProjectView.java | 2 +- org.eclipse.linuxtools.tmf/ChangeLog | 3 +- .../tmf/experiment/TmfExperiment.java | 2 +- .../tmf/request/TmfRequestExecutor.java | 5 +- 17 files changed, 129 insertions(+), 68 deletions(-) diff --git a/org.eclipse.linuxtools.lttng.ui/ChangeLog b/org.eclipse.linuxtools.lttng.ui/ChangeLog index 11468fefa5..d3641d4997 100644 --- a/org.eclipse.linuxtools.lttng.ui/ChangeLog +++ b/org.eclipse.linuxtools.lttng.ui/ChangeLog @@ -1,7 +1,15 @@ 2010-10-13 Francois Chouinard + * src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java : Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java : Added checks for disposed widget * .options: TraceDebug options file - * src/org/eclipse/linuxtools/lttng/ui/LTTngUiPlugin.java (stop): Closes the tarce log file + * src/org/eclipse/linuxtools/lttng/ui/LTTngUiPlugin.java (stop): Closes the trace log file * src/org/eclipse/linuxtools/lttng/ui/model/trange/TimeRangeComponent.java (toString): Added * src/org/eclipse/linuxtools/lttng/ui/model/trange/TimeRangeComposite.java (toString): Added * src/org/eclipse/linuxtools/lttng/ui/model/trange/TimeRangeEventProcess.java (toString): Added diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/common/AbsTimeUpdateView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/common/AbsTimeUpdateView.java index 4e0fd89151..971b221422 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/common/AbsTimeUpdateView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/common/AbsTimeUpdateView.java @@ -480,13 +480,15 @@ public abstract class AbsTimeUpdateView extends TmfView implements * @param waitInd */ protected void waitCursor(final boolean waitInd) { - if (tsfviewer != null) { + if ((tsfviewer != null) && (!tsfviewer.getControl().isDisposed())) { Display display = tsfviewer.getControl().getDisplay(); // Perform the updates on the UI thread display.asyncExec(new Runnable() { public void run() { - tsfviewer.waitCursor(waitInd); + if ((tsfviewer != null) && (!tsfviewer.getControl().isDisposed())) { + tsfviewer.waitCursor(waitInd); + } } }); } @@ -596,14 +598,16 @@ public abstract class AbsTimeUpdateView extends TmfView implements if (complete) { // reselect to original time ParamsUpdater paramUpdater = getParamsUpdater(); - if (paramUpdater != null && tsfviewer != null) { + if ((paramUpdater != null) && (tsfviewer != null) && (!tsfviewer.getControl().isDisposed())) { final Long selTime = paramUpdater.getSelectedTime(); if (selTime != null) { TraceDebug.debug("View: " + getName() + "\n\t\tRestoring the selected time to: " + selTime); Display display = tsfviewer.getControl().getDisplay(); display.asyncExec(new Runnable() { public void run() { - tsfviewer.setSelectedTime(selTime, false, this); + if ((tsfviewer != null) && (!tsfviewer.getControl().isDisposed())) { + tsfviewer.setSelectedTime(selTime, false, this); + } } }); } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java index b5f3cde35d..30ee295b17 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/controlflow/ControlFlowView.java @@ -889,36 +889,41 @@ public class ControlFlowView extends AbsTimeUpdateView implements if(tableViewer != null) { final Table table = tableViewer.getTable(); + + // Ignore update if widget is disposed + if (table.isDisposed()) return; + Display display = table.getDisplay(); - + // Perform the updates on the UI thread) display.asyncExec(new Runnable() { public void run() { - - tableViewer.setInput(items); // This shall be the minimal - // initial - tableFilter = new ViewProcessFilter(tableViewer); - tableViewer.setFilters(new ViewerFilter[] { tableFilter }); - - resizeTableColumns(table); - table.update(); - tableViewer.refresh(); - - tsfviewer.display(items, startBoundTime, endBoundTime, - updateTimeBounds); - - // validate visible boundaries - if (startVisibleWindow > -1 && endVisibleWindow > -1) { - tsfviewer.setSelectVisTimeWindow(startVisibleWindow, - endVisibleWindow, source); - } - - tsfviewer.resizeControls(); - - // Adjust the size of the vertical scroll bar to fit the - // contents - if (scrollFrame != null) { - updateScrolls(scrollFrame); + if (!table.isDisposed()) { + tableViewer.setInput(items); // This shall be the minimal + // initial + tableFilter = new ViewProcessFilter(tableViewer); + tableViewer.setFilters(new ViewerFilter[] { tableFilter }); + + resizeTableColumns(table); + table.update(); + tableViewer.refresh(); + + tsfviewer.display(items, startBoundTime, endBoundTime, + updateTimeBounds); + + // validate visible boundaries + if (startVisibleWindow > -1 && endVisibleWindow > -1) { + tsfviewer.setSelectVisTimeWindow(startVisibleWindow, + endVisibleWindow, source); + } + + tsfviewer.resizeControls(); + + // Adjust the size of the vertical scroll bar to fit the + // contents + if (scrollFrame != null) { + updateScrolls(scrollFrame); + } } } }); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java index 64aadd5a37..69922cd69e 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/HistogramCanvas.java @@ -403,11 +403,13 @@ class AsyncCanvasRedrawer { * */ public void asynchronousRedraw() { - if (parentCanvas != null) { + if ((parentCanvas != null) && (!parentCanvas.isDisposed())) { Display display = parentCanvas.getDisplay(); display.asyncExec(new Runnable() { public void run() { - parentCanvas.redraw(); + if ((parentCanvas != null) && (!parentCanvas.isDisposed())) { + parentCanvas.redraw(); + } } }); } @@ -440,11 +442,13 @@ class AsyncCanvasRedrawer { * */ public void asynchronousNotifyParentUpdatedInformation() { - if(parentCanvas != null) { + if((parentCanvas != null) && (!parentCanvas.isDisposed())) { Display display = parentCanvas.getDisplay(); display.asyncExec(new Runnable() { public void run() { - parentCanvas.notifyParentUpdatedInformation(); + if((parentCanvas != null) && (!parentCanvas.isDisposed())) { + parentCanvas.notifyParentUpdatedInformation(); + } } }); } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java index 30c71cd9b0..31f7ba0ff4 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/ParentHistogramCanvas.java @@ -470,10 +470,14 @@ public class ParentHistogramCanvas extends HistogramCanvas { * */ public void asynchronousNotifyParentSelectionWindowChanged() { + // Ignore update if widget is disposed + if (this.isDisposed()) return; + Display display = this.getDisplay(); display.asyncExec(new Runnable() { public void run() { - notifyParentSelectionWindowChanged(); + if(!ParentHistogramCanvas.this.isDisposed()) + notifyParentSelectionWindowChanged(); } }); } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java index 543cc7b7f0..b2d8fefb88 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/histogram/TimeTextGroup.java @@ -436,12 +436,17 @@ class AsyncTimeTextGroupRedrawer { * @param newTime The new time to set */ public void asynchronousSetValue(long newTime) { + // Ignore setting of value if widget is disposed + if (parentTimeTextGroup.getParent().isDisposed()) return; + final long tmpTime = newTime; Display display = parentTimeTextGroup.getParent().getDisplay(); display.asyncExec(new Runnable() { public void run() { - parentTimeTextGroup.setValue(tmpTime); + if (!parentTimeTextGroup.getParent().isDisposed()) { + parentTimeTextGroup.setValue(tmpTime); + } } }); } @@ -454,12 +459,16 @@ class AsyncTimeTextGroupRedrawer { * @param newGroupName The new group name to set */ public void asynchronousSetGroupName(String newGroupName) { + // Ignore setting of name if widget is disposed + if (parentTimeTextGroup.getParent().isDisposed()) return; + final String tmpName = newGroupName; - Display display = parentTimeTextGroup.getParent().getDisplay(); display.asyncExec(new Runnable() { public void run() { - parentTimeTextGroup.setGroupName(tmpName); + if (!parentTimeTextGroup.getParent().isDisposed()) { + parentTimeTextGroup.setGroupName(tmpName); + } } }); } @@ -471,10 +480,15 @@ class AsyncTimeTextGroupRedrawer { * */ public void asynchronousRedraw() { + // Ignore redraw if widget is disposed + if (parentTimeTextGroup.getParent().isDisposed()) return; + Display display = parentTimeTextGroup.getParent().getDisplay(); display.asyncExec(new Runnable() { public void run() { - parentTimeTextGroup.getParent().redraw(); + if (!parentTimeTextGroup.getParent().isDisposed()) { + parentTimeTextGroup.getParent().redraw(); + } } }); } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java index bd559bc8cd..5751cb2cc8 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java @@ -72,7 +72,7 @@ public class ProjectView extends TmfView { // Perform updates on the UI thread private Runnable fViewRefresher = new Runnable() { public void run() { - if (fViewer != null) { + if ((fViewer != null) && (!fViewer.getTree().isDisposed())) { Object[] elements = fViewer.getExpandedElements(); fViewer.refresh(); fViewer.setExpandedElements(elements); diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/ResourcesView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/ResourcesView.java index c5eb26abdd..759d079c88 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/ResourcesView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/resources/ResourcesView.java @@ -439,17 +439,21 @@ public class ResourcesView extends AbsTimeUpdateView implements public void displayModel(final ITmfTimeAnalysisEntry[] items, final long startBoundTime, final long endBoundTime, final boolean updateTimeBounds, final long startVisibleWindow, final long endVisibleWindow, final Object source) { - + + // Return if disposed + if ((tsfviewer == null) || (tsfviewer.getControl().isDisposed())) return; + Display display = tsfviewer.getControl().getDisplay(); display.asyncExec(new Runnable() { - public void run() { - tsfviewer.display(items, startBoundTime, endBoundTime, updateTimeBounds); - // validate visible boundaries - if (startVisibleWindow > -1 && endVisibleWindow > -1) { - tsfviewer.setSelectVisTimeWindow(startVisibleWindow, endVisibleWindow, source); + if ((tsfviewer != null) && (!tsfviewer.getControl().isDisposed())) { + tsfviewer.display(items, startBoundTime, endBoundTime, updateTimeBounds); + // validate visible boundaries + if (startVisibleWindow > -1 && endVisibleWindow > -1) { + tsfviewer.setSelectVisTimeWindow(startVisibleWindow, endVisibleWindow, source); + } + tsfviewer.resizeControls(); } - tsfviewer.resizeControls(); } }); } diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java index 6f4aff6508..99787b18e4 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/statistics/StatisticsView.java @@ -493,7 +493,7 @@ public class StatisticsView extends AbsTimeUpdateView { */ @Override protected void waitCursor(final boolean waitInd) { - if (treeViewer == null) { + if ((treeViewer == null) || (treeViewer.getTree().isDisposed())) { return; } @@ -505,11 +505,13 @@ public class StatisticsView extends AbsTimeUpdateView { // Perform the updates on the UI thread display.asyncExec(new Runnable() { public void run() { - Cursor cursor = null; /* indicates default */ - if (waitInd) { - cursor = fwaitCursor; + if ((treeViewer != null) && (!treeViewer.getTree().isDisposed())) { + Cursor cursor = null; /* indicates default */ + if (waitInd) { + cursor = fwaitCursor; + } + treeViewer.getControl().setCursor(cursor); } - treeViewer.getControl().setCursor(cursor); } }); } @@ -517,12 +519,13 @@ public class StatisticsView extends AbsTimeUpdateView { @Override public void ModelUpdatePrep(TmfTimeRange timeRange, boolean clearAllData) { Object input = treeViewer.getInput(); - if (input != null && input instanceof StatisticsTreeNode) { + if ((input != null) && (input instanceof StatisticsTreeNode) && (!treeViewer.getTree().isDisposed())) { ((StatisticsTreeNode) input).reset(); treeViewer.getTree().getDisplay().asyncExec(new Runnable() { // @Override public void run() { - treeViewer.refresh(); + if (!treeViewer.getTree().isDisposed()) + treeViewer.refresh(); } }); } @@ -530,13 +533,17 @@ public class StatisticsView extends AbsTimeUpdateView { @Override public void modelInputChanged(ILttngSyntEventRequest request, boolean complete) { + // Ignore update if disposed + if (treeViewer.getTree().isDisposed()) return; + treeViewer.getTree().getDisplay().asyncExec(new Runnable() { // @Override public void run() { - treeViewer.refresh(); + if (!treeViewer.getTree().isDisposed()) + treeViewer.refresh(); } }); - } + } /* * (non-Javadoc) diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java index be2a5e7622..167cecd421 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/SpinnerGroup.java @@ -275,7 +275,9 @@ public class SpinnerGroup { * Perform the update on the UI thread */ public void updateSpinners() { - + // Ignore update if disposed + if (seconds.isDisposed()) return; + seconds.getDisplay().asyncExec(new Runnable() { public void run() { if (!seconds.isDisposed() && !nanosec.isDisposed()) { diff --git a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java index dd234847e1..90e3c1f407 100644 --- a/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java +++ b/org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java @@ -239,6 +239,9 @@ public class TimeFrameView extends TmfView { */ private void updateSlider(TmfTimeRange range, TmfTimestamp timestamp) { + // Ignore update if disposed + if (fSlider.isDisposed()) return; + // Determine the new relative position byte scale = range.getEndTime().getScale(); long total = range.getStartTime().getAdjustment(range.getEndTime(), scale); diff --git a/org.eclipse.linuxtools.tmf.ui/ChangeLog b/org.eclipse.linuxtools.tmf.ui/ChangeLog index fdfbb0b319..c2c18c9e7b 100644 --- a/org.eclipse.linuxtools.tmf.ui/ChangeLog +++ b/org.eclipse.linuxtools.tmf.ui/ChangeLog @@ -1,6 +1,7 @@ 2010-10-13 Francois Chouinard - * src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java: Fixed comments + * src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java: Added checks for disposed widget 2010-09-12 francois diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java index ee43bc659c..db784b70a8 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java @@ -271,7 +271,7 @@ public class TmfEventsTable extends TmfComponent { @TmfSignalHandler public void experimentUpdated(TmfExperimentUpdatedSignal signal) { - if (signal.getExperiment() != fTrace) return; + if ((signal.getExperiment() != fTrace) || fTable.isDisposed()) return; // Perform the refresh on the UI thread fTable.getDisplay().asyncExec(new Runnable() { public void run() { @@ -285,7 +285,7 @@ public class TmfEventsTable extends TmfComponent { @TmfSignalHandler public void traceUpdated(TmfTraceUpdatedSignal signal) { - if (signal.getTrace() != fTrace) return; + if ((signal.getTrace() != fTrace ) || fTable.isDisposed()) return; // Perform the refresh on the UI thread fTable.getDisplay().asyncExec(new Runnable() { public void run() { @@ -301,7 +301,7 @@ public class TmfEventsTable extends TmfComponent { private boolean fRefreshPending = false; @TmfSignalHandler public synchronized void rangeSynched(TmfRangeSynchSignal signal) { - if (!fRefreshPending) { + if (!fRefreshPending && !fTable.isDisposed()) { // Perform the refresh on the UI thread fRefreshPending = true; fTable.getDisplay().asyncExec(new Runnable() { @@ -317,7 +317,7 @@ public class TmfEventsTable extends TmfComponent { @TmfSignalHandler public void currentTimeUpdated(final TmfTimeSynchSignal signal) { - if (signal.getSource() != fTable && fTrace != null) { + if (signal.getSource() != fTable && fTrace != null && !fTable.isDisposed()) { Job job = new Job("seeking...") { @Override protected IStatus run(IProgressMonitor monitor) { @@ -325,6 +325,9 @@ public class TmfEventsTable extends TmfComponent { // Perform the updates on the UI thread fTable.getDisplay().asyncExec(new Runnable() { public void run() { + // Return if table is disposed + if (fTable.isDisposed()) return; + fTable.setSelection(index); // The timestamp might not correspond to an actual event // and the selection will point to the next experiment event. diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java index d2e92d89e0..687ed1d712 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/project/ProjectView.java @@ -148,7 +148,7 @@ public class ProjectView extends TmfView { // Perform updates on the UI thread private Runnable fViewRefresher = new Runnable() { public void run() { - if (fViewer != null) { + if ((fViewer != null) && (!fViewer.getTree().isDisposed())) { Object[] elements = fViewer.getExpandedElements(); fViewer.refresh(); fViewer.setExpandedElements(elements); diff --git a/org.eclipse.linuxtools.tmf/ChangeLog b/org.eclipse.linuxtools.tmf/ChangeLog index 936b9f3c63..1074d89d9c 100644 --- a/org.eclipse.linuxtools.tmf/ChangeLog +++ b/org.eclipse.linuxtools.tmf/ChangeLog @@ -1,6 +1,7 @@ 2010-10-13 Francois Chouinard - * src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java: Fixed comments + * src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java: Added checks for disposed widget + * src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java: Added checks for disposed widget * src/org/eclipse/linuxtools/tmf/request/TmfDataRequest.java: Added waitForStart() API * src/org/eclipse/linuxtools/tmf/event/TmfEventContent.java: Added setEvent() * src/org/eclipse/linuxtools/tmf/event/TmfTimeRange.java: Added getIntersection() diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java index 74899f2c31..d9dff18c31 100644 --- a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java +++ b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java @@ -148,7 +148,7 @@ public class TmfExperiment extends TmfEventProvider imple * Clears the experiment */ @Override - public void dispose() { + public synchronized void dispose() { if (fTraces != null) { for (ITmfTrace trace : fTraces) { trace.dispose(); diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java index d6245819ca..2598a7d953 100644 --- a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java +++ b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfRequestExecutor.java @@ -67,7 +67,7 @@ public class TmfRequestExecutor implements Executor { /** * @return the shutdown state (i.e. if it is accepting new requests) */ - public boolean isShutdown() { + public synchronized boolean isShutdown() { return fExecutor.isShutdown(); } @@ -115,7 +115,8 @@ public class TmfRequestExecutor implements Executor { */ protected synchronized void scheduleNext() { if ((fCurrentRequest = fRequestQueue.poll()) != null) { - fExecutor.execute(fCurrentRequest); + if (!isShutdown()) + fExecutor.execute(fCurrentRequest); } } -- 2.34.1