Bug 345298 - [breakpoints] BreakpointManager deadlocks trying to restore
breakpoints
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java
index 3fd04ff..6ea9afa 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/model/Breakpoint.java
@@ -28,6 +28,7 @@
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
+import org.eclipse.debug.internal.core.BreakpointManager;
import org.eclipse.debug.internal.core.DebugCoreMessages;
/**
@@ -41,17 +42,21 @@
public abstract class Breakpoint extends PlatformObject implements IBreakpoint {
- static {
- // making sure that the BreakpointManager is correctly initialized
- // before any breakpoint marker related operation (see bug 54993)
- DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
- }
-
/**
* Underlying marker.
*/
private IMarker fMarker= null;
-
+
+ /**
+ * Default constructor used to ensure that breakpoint manager is initialized.
+ */
+ public Breakpoint() {
+ // making sure that the BreakpointManager is correctly initialized
+ // before any breakpoint marker related operation (see bug 54993)
+ ((BreakpointManager)DebugPlugin.getDefault().getBreakpointManager()).ensureBreakpointsInitialized();
+ }
+
+
/**
* @see IBreakpoint#setMarker(IMarker)
*/
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
index 4d631c2..cb666a0 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
@@ -394,6 +394,13 @@
}
/**
+ * Calls {@link #initializeBreakpoints()} if breakpoints have not yet been initialized.
+ */
+ public void ensureBreakpointsInitialized() {
+ getBreakpoints0();
+ }
+
+ /**
* The BreakpointManager waits to load the breakpoints
* of the workspace until a request is made to retrieve the
* breakpoints.