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.