mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-19 15:05:36 +02:00
[282924] Call decrementInstallCount() the correct amount of times.
This commit is contained in:
parent
82c2564411
commit
731ac7ed59
1 changed files with 18 additions and 5 deletions
|
@ -578,6 +578,9 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
|
||||||
// Reset the thread (is it necessary?)
|
// Reset the thread (is it necessary?)
|
||||||
attributes.put(ATTR_THREAD_ID, NULL_STRING);
|
attributes.put(ATTR_THREAD_ID, NULL_STRING);
|
||||||
|
|
||||||
|
// Remove breakpoint problem marker (if any)
|
||||||
|
removeBreakpointProblemMarker(breakpoint);
|
||||||
|
|
||||||
// Finally, update the platform breakpoint
|
// Finally, update the platform breakpoint
|
||||||
try {
|
try {
|
||||||
breakpoint.incrementInstallCount();
|
breakpoint.incrementInstallCount();
|
||||||
|
@ -777,6 +780,8 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the breakpoint is installed: it might not have been if it wasn't enabled at startup (Bug261082)
|
// Check if the breakpoint is installed: it might not have been if it wasn't enabled at startup (Bug261082)
|
||||||
|
// Or the installation might have failed; in this case, we still try to install it again because
|
||||||
|
// some attribute might have changed which will make the install succeed.
|
||||||
if (!breakpointIDs.containsKey(breakpoint) && !targetBPs.containsValue(breakpoint)) {
|
if (!breakpointIDs.containsKey(breakpoint) && !targetBPs.containsValue(breakpoint)) {
|
||||||
// Install only if the breakpoint is enabled
|
// Install only if the breakpoint is enabled
|
||||||
boolean bpEnabled = attributes.get(ICBreakpoint.ENABLED).equals(true) && fBreakpointManager.isEnabled();
|
boolean bpEnabled = attributes.get(ICBreakpoint.ENABLED).equals(true) && fBreakpointManager.isEnabled();
|
||||||
|
@ -787,7 +792,7 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
|
||||||
determineDebuggerPath(dmc, attributes, new RequestMonitor(getExecutor(), rm) {
|
determineDebuggerPath(dmc, attributes, new RequestMonitor(getExecutor(), rm) {
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
installBreakpoint(dmc, breakpoint, attributes, new RequestMonitor(getExecutor(), rm));
|
installBreakpoint(dmc, breakpoint, attributes, rm);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1282,7 +1287,7 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
|
||||||
// Reset the breakpoint install count
|
// Reset the breakpoint install count
|
||||||
for (IBreakpointsTargetDMContext ctx : fPlatformBPs.keySet()) {
|
for (IBreakpointsTargetDMContext ctx : fPlatformBPs.keySet()) {
|
||||||
Map<ICBreakpoint, Map<String, Object>> breakpoints = fPlatformBPs.get(ctx);
|
Map<ICBreakpoint, Map<String, Object>> breakpoints = fPlatformBPs.get(ctx);
|
||||||
clearBreakpointStatus(breakpoints.keySet().toArray(new ICBreakpoint[breakpoints.size()]));
|
clearBreakpointStatus(breakpoints.keySet().toArray(new ICBreakpoint[breakpoints.size()]), ctx);
|
||||||
}
|
}
|
||||||
// This will prevent Shutdown() from trying to remove bps from a
|
// This will prevent Shutdown() from trying to remove bps from a
|
||||||
// backend that has already shutdown
|
// backend that has already shutdown
|
||||||
|
@ -1296,15 +1301,23 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
|
||||||
/**
|
/**
|
||||||
* @param bps
|
* @param bps
|
||||||
*/
|
*/
|
||||||
private void clearBreakpointStatus(final ICBreakpoint[] bps)
|
private void clearBreakpointStatus(final ICBreakpoint[] bps, final IBreakpointsTargetDMContext ctx)
|
||||||
{
|
{
|
||||||
new Job("Clear Breakpoints Status") { //$NON-NLS-1$
|
new Job("Clear Breakpoints Status") { //$NON-NLS-1$
|
||||||
@Override
|
@Override
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
IWorkspaceRunnable wr = new IWorkspaceRunnable() {
|
IWorkspaceRunnable wr = new IWorkspaceRunnable() {
|
||||||
public void run(IProgressMonitor monitor) throws CoreException {
|
public void run(IProgressMonitor monitor) throws CoreException {
|
||||||
for (ICBreakpoint breakpoint : bps) {
|
// For every platform breakpoint that has at least one target breakpoint installed
|
||||||
breakpoint.resetInstallCount();
|
// we must decrement the install count, for every target breakpoint.
|
||||||
|
// Note that we cannot simply call resetInstallCount() because another
|
||||||
|
// launch may be using the same platform breakpoint.
|
||||||
|
Map<ICBreakpoint, Vector<IBreakpointDMContext>> breakpoints = fBreakpointIDs.get(ctx);
|
||||||
|
for (ICBreakpoint breakpoint : breakpoints.keySet()) {
|
||||||
|
Vector<IBreakpointDMContext> targetBps = breakpoints.get(breakpoint);
|
||||||
|
for (int i=0; i<targetBps.size(); i++) {
|
||||||
|
breakpoint.decrementInstallCount();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue