From 10534b59684a2814e08bf0c6ddbb9c95d1bb94f3 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 25 Jan 2008 21:04:27 +0000 Subject: [PATCH] Patch for Elena bug 166660. Cover up some wholes in the MI inferior handling that could cause multi-threading issues. --- .../debug/mi/core/cdi/BreakpointManager.java | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java index e7bb474e22f..5ff58c50c4b 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java @@ -147,7 +147,7 @@ public class BreakpointManager extends Manager { // Stop the program if (allowInterrupt && target.isRunning()) { // Disable events. - ((EventManager)getSession().getEventManager()).allowProcessingEvents(false); + ((EventManager) getSession().getEventManager()).allowProcessingEvents(false); target.suspend(); shouldRestart = true; } @@ -155,10 +155,9 @@ public class BreakpointManager extends Manager { } void resumeInferior(Target target, boolean shouldRestart) throws CDIException { + ((EventManager) getSession().getEventManager()).allowProcessingEvents(true); if (shouldRestart) { target.resume(); - // Enable events again. - ((EventManager)getSession().getEventManager()).allowProcessingEvents(true); } } @@ -239,18 +238,23 @@ public class BreakpointManager extends Manager { if (info == null) { throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$ } + for (int i = 0; i < miBreakpoints.length; i++) { + miBreakpoints[i].setEnabled(true); + } + breakpoint.setEnabled0(true); } catch (MIException e) { throw new MI2CDIException(e); } finally { - // Resume the program and enable events. - resumeInferior(target, restart); + try { + // Resume the program and enable events. + resumeInferior(target, restart); + } finally { + // Fire a changed Event. + miSession.fireEvent(new MIBreakpointChangedEvent(miSession, numbers[0])); + } } - for (int i = 0; i < miBreakpoints.length; i++) { - miBreakpoints[i].setEnabled(true); - } - breakpoint.setEnabled0(true); - // Fire a changed Event. - miSession.fireEvent(new MIBreakpointChangedEvent(miSession, numbers[0])); + + } /** @@ -299,17 +303,20 @@ public class BreakpointManager extends Manager { if (info == null) { throw new CDIException(CdiResources.getString("cdi.Common.No_answer")); //$NON-NLS-1$ } + for (int i = 0; i < miBreakpoints.length; i++) { + miBreakpoints[i].setEnabled(false); + } + breakpoint.setEnabled0(false); } catch (MIException e) { throw new MI2CDIException(e); } finally { - resumeInferior(target, restart); + try { + resumeInferior(target, restart); + } finally { + // Fire a changed Event. + miSession.fireEvent(new MIBreakpointChangedEvent(miSession, numbers[0])); + } } - for (int i = 0; i < miBreakpoints.length; i++) { - miBreakpoints[i].setEnabled(false); - } - breakpoint.setEnabled0(false); - // Fire a changed Event. - miSession.fireEvent(new MIBreakpointChangedEvent(miSession, numbers[0])); } /**