1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Bug 155464: Thread mix-up when debugging multi-threaded programs.

This commit is contained in:
Mikhail Khodjaiants 2007-02-02 12:51:19 +00:00
parent 8352714872
commit 6a3d9e2e9e

View file

@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Stefan Bylund (Enea, steby@enea.se) - patch for bug 155464
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.debug.internal.core.model; package org.eclipse.cdt.debug.internal.core.model;
@ -693,6 +694,7 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum
private void handleResumedEvent( ICDIResumedEvent event ) { private void handleResumedEvent( ICDIResumedEvent event ) {
CDebugElementState state = CDebugElementState.RESUMED; CDebugElementState state = CDebugElementState.RESUMED;
int detail = DebugEvent.RESUME; int detail = DebugEvent.RESUME;
syncWithBackend();
if ( isCurrent() && event.getType() != ICDIResumedEvent.CONTINUE ) { if ( isCurrent() && event.getType() != ICDIResumedEvent.CONTINUE ) {
preserveStackFrames(); preserveStackFrames();
switch( event.getType() ) { switch( event.getType() ) {
@ -893,6 +895,7 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum
} }
protected void resumedByTarget( int detail, List events ) { protected void resumedByTarget( int detail, List events ) {
syncWithBackend();
if ( isCurrent() && detail != DebugEvent.CLIENT_REQUEST && detail != DebugEvent.UNSPECIFIED ) { if ( isCurrent() && detail != DebugEvent.CLIENT_REQUEST && detail != DebugEvent.UNSPECIFIED ) {
setState( CDebugElementState.STEPPED ); setState( CDebugElementState.STEPPED );
preserveStackFrames(); preserveStackFrames();
@ -933,4 +936,16 @@ public class CThread extends CDebugElement implements ICThread, IRestart, IResum
} }
} }
} }
private void syncWithBackend() {
ICDIThread cdiThread = getCDIThread();
ICDIThread currentThread = null;
try {
currentThread = cdiThread.getTarget().getCurrentThread();
}
catch( CDIException e ) {
// ignore
}
setCurrent( cdiThread.equals( currentThread ) );
}
} }