Bug 114571 - concurrent access to HashMap
Summary: concurrent access to HashMap
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2 M4   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 118444 119081 190563 (view as bug list)
Depends on:
Blocks:
 
Reported: 2005-11-01 12:18 EST by Igor Fedorenko CLA
Modified: 2007-06-04 12:48 EDT (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Igor Fedorenko CLA 2005-11-01 12:18:02 EST
Although I do not know how to reproduce this problem, I get the following
exception(s) from time to time. Eclipse 3.1.1 + WTP, IBM JDK j9n142-20050929,
WinXP SP2.

!ENTRY org.eclipse.core.resources 4 2 2005-10-31 11:33:07.837
!MESSAGE Problems occurred when invoking code from plug-in:
"org.eclipse.core.resources".
!STACK 0
java.util.ConcurrentModificationException: concurrent access to HashMap
attempted by Thread[Worker-66,5,main]
	at java.util.HashMap.onEntry(HashMap.java:211)
	at java.util.HashMap.transfer(HashMap.java:554)
	at java.util.HashMap.resize(HashMap.java:541)
	at java.util.HashMap.addEntry(HashMap.java:901)
	at java.util.HashMap.put(HashMap.java:474)
	at java.util.HashSet.add(HashSet.java:206)
	at org.eclipse.jdt.internal.core.JavaModel.getTarget(JavaModel.java:372)
	at
org.eclipse.jdt.internal.core.ClasspathEntry.validateClasspathEntry(ClasspathEntry.java:1591)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2059)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1954)
	at
org.eclipse.jdt.internal.core.DeltaProcessor.updateClasspathMarkers(DeltaProcessor.java:2073)
	at
org.eclipse.jdt.internal.core.DeltaProcessor.updateClasspathMarkers(DeltaProcessor.java:2103)
	at
org.eclipse.jdt.internal.core.DeltaProcessor.updateClasspathMarkers(DeltaProcessor.java:2119)
	at
org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1823)
	at
org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:432)
	at
org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:276)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1044)
	at org.eclipse.core.runtime.Platform.run(Platform.java:783)
	at
org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:270)
	at
org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:144)
	at
org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:185)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:200)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)

!ENTRY org.eclipse.ui 4 4 2005-10-31 11:33:07.868
!MESSAGE Unhandled event loop exception

!ENTRY org.eclipse.ui 4 0 2005-10-31 11:33:07.868
!MESSAGE Failed to execute runnable (java.util.ConcurrentModificationException:
concurrent access to HashMap attempted by Thread[main,6,main])
Unhandled event loop exception
Reason:
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable
(java.util.ConcurrentModificationException: concurrent access to HashMap
attempted by Thread[main,6,main])
	at org.eclipse.swt.SWT.error(SWT.java:2942)
	at org.eclipse.swt.SWT.error(SWT.java:2865)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:126)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3057)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2716)
	at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123)
	at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.done(EventLoopProgressMonitor.java:82)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1731)
	at
org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:110)
	at
org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:73)
	at
org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:63)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:441)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:700)
	at
org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:3736)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1405)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1458)
	at org.eclipse.ui.internal.SaveableHelper$1.run(SaveableHelper.java:95)
	at org.eclipse.ui.internal.SaveableHelper$2.run(SaveableHelper.java:116)
	at
org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:346)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:291)
	at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:624)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:621)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2134)
	at
org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:122)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:100)
	at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1154)
	at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2714)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:2727)
	at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:996)
	at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:117)
	at org.eclipse.core.commands.Command.execute(Command.java:311)
	at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:396)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:459)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:781)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:828)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:550)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:493)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:117)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:917)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:842)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:867)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:852)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:880)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:876)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1190)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3135)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3038)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1656)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2711)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
	at java.lang.reflect.Method.invoke(Method.java:391)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
	at org.eclipse.core.launcher.Main.run(Main.java:973)
	at org.eclipse.core.launcher.Main.main(Main.java:948)
Caused by: java.util.ConcurrentModificationException: concurrent access to
HashMap attempted by Thread[main,6,main]
	at java.util.HashMap.onExit(HashMap.java:223)
	at java.util.HashMap.transfer(HashMap.java:558)
	at java.util.HashMap.resize(HashMap.java:541)
	at java.util.HashMap.addEntry(HashMap.java:901)
	at java.util.HashMap.put(HashMap.java:474)
	at java.util.HashSet.add(HashSet.java:206)
	at org.eclipse.jdt.internal.core.JavaModel.getTarget(JavaModel.java:372)
	at
org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:522)
	at
org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:625)
	at
org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:586)
	at
org.eclipse.jdt.internal.core.JavaProject.findPackageFragmentRoots(JavaProject.java:1097)
	at
org.eclipse.jdt.internal.ui.packageview.ClassPathContainer.contains(ClassPathContainer.java:190)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.internalGetParent(PackageExplorerContentProvider.java:231)
	at
org.eclipse.jdt.ui.StandardJavaElementContentProvider.getParent(StandardJavaElementContentProvider.java:231)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.getParent(PackageExplorerContentProvider.java:215)
	at
org.eclipse.jdt.internal.ui.packageview.WorkingSetAwareContentProvider.getModelPath(WorkingSetAwareContentProvider.java:142)
	at
org.eclipse.jdt.internal.ui.packageview.WorkingSetAwareContentProvider.getTreePaths(WorkingSetAwareContentProvider.java:126)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$PackageExplorerProblemTreeViewer.setSelectionToWidget(PackageExplorerPart.java:645)
	at
org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1208)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$PackageExplorerProblemTreeViewer.preservingSelection(PackageExplorerPart.java:624)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1289)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider$3.run(PackageExplorerContentProvider.java:615)
	at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider$7.run(PackageExplorerContentProvider.java:659)
	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:3057)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2716)
	at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123)
	at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.done(EventLoopProgressMonitor.java:82)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1731)
	at
org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:110)
	at
org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:73)
	at
org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:63)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:441)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:700)
	at
org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:3736)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1405)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1458)
	at org.eclipse.ui.internal.SaveableHelper$1.run(SaveableHelper.java:95)
	at org.eclipse.ui.internal.SaveableHelper$2.run(SaveableHelper.java:116)
	at
org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:346)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:291)
	at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:624)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:621)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2134)
	at
org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:122)
	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:100)
	at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1154)
	at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2714)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:2727)
	at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:996)
	at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:117)
	at org.eclipse.core.commands.Command.execute(Command.java:311)
	at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:396)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:459)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:781)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:828)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:550)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:493)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:117)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:917)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:842)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:867)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:852)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:880)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:876)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1190)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3135)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3038)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3706)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1656)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2711)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
	at java.lang.reflect.Method.invoke(Method.java:391)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
	at org.eclipse.core.launcher.Main.run(Main.java:973)
	at org.eclipse.core.launcher.Main.main(Main.java:948)
Failed to execute runnable (java.util.ConcurrentModificationException:
concurrent access to HashMap attempted by Thread[main,6,main])
Comment 1 Jerome Lanneluc CLA 2005-11-30 05:37:57 EST
*** Bug 118444 has been marked as a duplicate of this bug. ***
Comment 2 Jerome Lanneluc CLA 2005-11-30 09:41:14 EST
Changed code to ensure that access to JavaModel#existingExternalFiles and JavaCModel#existingExternalConfirmedFiles is synchronized.
Comment 3 Olivier Thomann CLA 2005-12-02 14:18:23 EST
*** Bug 119081 has been marked as a duplicate of this bug. ***
Comment 4 Eric Goff CLA 2005-12-12 10:14:54 EST
I just happened to look at this.
Forgive me if I am sticking my nose out here, but the meaning
of the the exception has *nothing* to do with it being synchronized
or not.  (Although it could under some circumstances)

Here is an example of the error.

HashMap<String,String> m = new HashMap<String,String>() ;
m.put("foo","bar") ;
m.put("fu","bar") ;
for(String s: m.values()) {
    m.clear() ;
}

You modified the list while you were iterating over it.
That is the error.

Cheers,
Eric
Comment 5 Jerome Lanneluc CLA 2005-12-12 10:28:04 EST
We're never removing anything from this set. We're only adding or getting. The problem could only occurred if 2 threads were adding at the same time. Synchronizing the access to this set solved the concurrency issue.
Comment 6 David Audel CLA 2005-12-13 10:58:00 EST
Verified for 3.2 M4 using build I20051213-0010
Comment 7 Jerome Lanneluc CLA 2007-06-02 05:36:43 EDT
*** Bug 190563 has been marked as a duplicate of this bug. ***
Comment 8 Bala Balakumran CLA 2007-06-04 12:08:46 EDT
Can a fix be provided for eclipse 3.0.2?
Comment 9 Jerome Lanneluc CLA 2007-06-04 12:48:47 EDT
(In reply to comment #8)
> Can a fix be provided for eclipse 3.0.2?
> 
This fix has already been backported in the R3_0_maintenance branch as bug 162517.