diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index ee2e16bc481..1b0784293bb 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2003-01-14 Mikhail Khodjaiants + Check if thread is already disposed in the CDI event handler because the array of listeners used by EventManager + in some situations is not up to date. + * CThread.java + 2003-01-14 Alain Magloire * src/org/eclipse/cdt/debug/core/cdi/ICDIVariableManager.java: New file. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java index d98f252ce57..dd3f3b137c3 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java @@ -112,6 +112,8 @@ public class CThread extends CDebugElement private int fLastStackDepth = 0; + private boolean fDisposed = false; + /** * Constructor for CThread. * @param target @@ -418,6 +420,8 @@ public class CThread extends CDebugElement */ public void handleDebugEvent( ICDIEvent event ) { + if ( isDisposed() ) + return; ICDIObject source = event.getSource(); if ( source == null ) return; @@ -766,6 +770,7 @@ public class CThread extends CDebugElement protected void terminated() { setRunning( false ); + dispose(); cleanup(); fireTerminateEvent(); } @@ -1138,4 +1143,14 @@ public class CThread extends CDebugElement return this; return super.getAdapter(adapter); } + + protected void dispose() + { + fDisposed = true; + } + + protected boolean isDisposed() + { + return fDisposed; + } }