Bug 86412 - Performance results for testConditionalBreakpoint not useful on Linux
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/performance/PerfConditionalBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/performance/PerfConditionalBreakpointsTests.java
index f3955c6..e2ddb08 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/performance/PerfConditionalBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/performance/PerfConditionalBreakpointsTests.java
@@ -10,11 +10,17 @@
*******************************************************************************/
package org.eclipse.jdt.debug.tests.performance;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
import org.eclipse.jdt.debug.core.IJavaThread;
@@ -73,7 +79,7 @@
removeAllBreakpoints();
}
- private synchronized void breakpointHit(IJavaThread thread) {
+ private void breakpointHit(final IJavaThread thread) {
try {
if (!fConditionalBreakpointSet) {
fBP.delete();
@@ -94,7 +100,18 @@
if (fHitCount <= fMeasuredRuns) {
startMeasuring();
} else {
- fBP.delete();
+ new Job("Breakpoint Delete Job") {
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ fBP.delete();
+ thread.terminate();
+ } catch (CoreException e) {
+ fException = e;
+ }
+ return Status.OK_STATUS;
+ }
+
+ }.schedule();
}
}
} catch (Exception e) {
@@ -102,8 +119,11 @@
removeAllBreakpoints();
} finally {
try {
- thread.resume();
+ if (thread.canResume()) {
+ thread.resume();
+ }
} catch (DebugException e) {
+ e.printStackTrace();
fException = e;
}
}