Bug 210638 - [Debug] Can't restore Breakpoints view : concurrent access/hashmap
Summary: [Debug] Can't restore Breakpoints view : concurrent access/hashmap
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.3.1   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 3.3.2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-11-22 06:03 EST by Eric Estievenart CLA
Modified: 2007-12-12 10:29 EST (History)
4 users (show)

See Also:
philippe_mulet: pmc_approved+


Attachments
Proposed fix (2.93 KB, patch)
2007-11-23 04:07 EST, Jerome Lanneluc CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Estievenart CLA 2007-11-22 06:03:08 EST
Build ID: M20071023-1652

Just happened when reopening eclipse.
Stack trace follows.

More information:
java.util.ConcurrentModificationException: concurrent access to HashMap attempted by Thread[main,6,main]
at java.util.HashMap.onExit(HashMap.java:217)
at java.util.HashMap.transfer(HashMap.java:514)
at java.util.HashMap.resize(HashMap.java:500)
at java.util.HashMap.addEntry(HashMap.java:800)
at java.util.HashMap.put(HashMap.java:441)
at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer(JavaCore.java:1597)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2199)
at org.eclipse.jdt.internal.core.JavaModelManager$9.run(JavaModelManager.java:2148)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2164)
at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1544)
at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1571)
at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2558)
at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1848)
at org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots(DeltaProcessingState.java:202)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:717)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:785)
at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:4519)
at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:69)
at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2218)
at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1546)
at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1571)
at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2558)
at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1848)
at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:395)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:229)
at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:423)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:218)
at org.eclipse.jdt.internal.core.JarPackageFragment.generateInfos(JarPackageFragment.java:160)
at org.eclipse.jdt.internal.core.Openable.openParent(Openable.java:423)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:218)
at org.eclipse.jdt.internal.core.BinaryMember.generateInfos(BinaryMember.java:44)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:505)
at org.eclipse.jdt.internal.core.BinaryType.getElementInfo(BinaryType.java:258)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:235)
at org.eclipse.jdt.internal.core.JavaElement.exists(JavaElement.java:153)
at org.eclipse.jdt.internal.debug.ui.BreakpointUtils.getMember(BreakpointUtils.java:137)
at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getLineBreakpointText(JDIModelPresentation.java:1530)
at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getBreakpointText(JDIModelPresentation.java:1444)
at org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getText(JDIModelPresentation.java:216)
at org.eclipse.debug.internal.ui.LazyModelPresentation.getText(LazyModelPresentation.java:163)
at org.eclipse.debug.internal.ui.DelegatingModelPresentation.getText(DelegatingModelPresentation.java:162)
at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsLabelProvider.getText(BreakpointsLabelProvider.java:86)
at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsComparator.compare(BreakpointsComparator.java:94)
at org.eclipse.jface.viewers.ViewerComparator$1.compare(ViewerComparator.java:187)
at java.util.Arrays.mergeSort(Arrays.java:1299)
at java.util.Arrays.mergeSort(Arrays.java:1310)
at java.util.Arrays.sort(Arrays.java:1238)
at org.eclipse.jface.viewers.ViewerComparator.sort(ViewerComparator.java:185)
at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:604)
at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2500)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1829)
at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:704)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1804)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1760)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1746)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1433)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1368)
at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:390)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1330)
at org.eclipse.jface.viewers.CheckboxTreeViewer.preservingSelection(CheckboxTreeViewer.java:371)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1431)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:536)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1390)
at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsViewer.refresh(BreakpointsViewer.java:340)
at org.eclipse.jface.viewers.ContentViewer.setLabelProvider(ContentViewer.java:282)
at org.eclipse.jface.viewers.StructuredViewer.setLabelProvider(StructuredViewer.java:2074)
at org.eclipse.jface.viewers.ColumnViewer.setLabelProvider(ColumnViewer.java:376)
at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView.createViewer(BreakpointsView.java:153)
at org.eclipse.debug.ui.AbstractDebugView$ViewerPage.createControl(AbstractDebugView.java:270)
at org.eclipse.debug.ui.AbstractDebugView.createDefaultPage(AbstractDebugView.java:358)
at org.eclipse.ui.part.PageBookView.createPartControl(PageBookView.java:473)
at org.eclipse.debug.ui.AbstractDebugView.createPartControl(AbstractDebugView.java:319)
at org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView.createPartControl(BreakpointsView.java:129)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:370)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:227)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:299)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:531)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:179)
at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:400)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:668)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576)
at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:564)
at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:270)
at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:931)
at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2515)
at org.eclipse.ui.internal.WorkbenchWindow$23.run(WorkbenchWindow.java:2837)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2818)
at org.eclipse.ui.internal.WorkbenchWindow$17.runWithException(WorkbenchWindow.java:2135)
at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3296)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2974)
at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:801)
at org.eclipse.ui.internal.Workbench$25.runWithException(Workbench.java:1342)
at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3296)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2974)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2309)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
at org.eclipse.equinox.launcher.Main.main(Main.java:1148)

-----------------------------------------------
eclipse.buildId=M20071023-1652
java.fullversion=J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20061001 (JIT enabled)
J9VM - 20060915_08260_lHdSMR
JIT  - 20060908_1811_r8
GC   - 20060906_AA
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US
Framework arguments:  -showlocation
Command-line arguments:  -os linux -ws gtk -arch x86
Comment 1 Darin Wright CLA 2007-11-22 08:55:59 EST
Exception appears to be in the Java model
Comment 2 Jerome Lanneluc CLA 2007-11-23 04:07:29 EST
Created attachment 83610 [details]
Proposed fix

The fix consists in using a Hashtable (which is synchronized) instead of a HashMap.
No regression tests can be written for this bug since this is a timing issue.
Comment 3 Jerome Lanneluc CLA 2007-11-23 04:09:33 EST
Fix released for 3.4M4
Comment 4 Jerome Lanneluc CLA 2007-11-26 11:04:56 EST
The fix is trivial. Without it, there is a risk of ConcurrentModificationException at startup which looks really bad to the end user (it prevented the Breakpoint view from opening in this case).
Please approve for 3.3.2.
Comment 5 Philipe Mulet CLA 2007-12-03 17:00:47 EST
+1 for 3.3.2
Comment 6 Jerome Lanneluc CLA 2007-12-04 04:12:58 EST
Fix released for 3.3.2
Comment 7 Eric Jodet CLA 2007-12-12 10:29:25 EST
Verified for 3.4 M4 using build I20071211-0010