Community
Participate
Working Groups
+++ This bug was initially created as a clone of Bug #114571 +++ Synchronization fix is needed in org.eclipse.jdt.internal.core.JavaModel.java to prevent infinite loop on corrupted HashSet which occurs on multiprocessor i5/OS platform (or possibly on any MP system). Would like back port of this self-contained fix to 3.0.2 level. Details => JVM dump of infinite loop on corrupted hashMap. Note two threads are looping on same hashMap in contains.Key(...) method => Thread: 000004EF Thread-0 TDE: B003900007879000 Thread priority: 5 Thread status: Running Thread group: main Runnable: java/lang/Thread Stack: java/util/HashMap.containsKey(Ljava/lang/Object;)Z+30 (HashMap.java:342) java/util/HashSet.contains(Ljava/lang/Object;)Z+0 (HashSet.java:180) org/eclipse/jdt/internal/core/JavaModel.getTarget(Lorg/eclipse/core/resour e/core/runtime/IPath;Z)Ljava/lang/Object;+0 (JavaModel.java:336) org/eclipse/jdt/internal/core/JavaProject.computePackageFragmentRoots(Lorg thEntry;Lorg/eclipse/jdt/internal/compiler/util/ObjectVector;Ljava/uti .java® :458) org/eclipse/jdt/internal/core/JavaProject.computePackageFragmentRoots([Lor athEntry;Lorg/eclipse/jdt/internal/compiler/util/ObjectVector;Ljava/ut t.java:570) org/eclipse/jdt/internal/core/JavaProject.computePackageFragmentRoots([Lor athEntry;Z)[Lorg/eclipse/jdt/core/IPackageFragmentRoot;+0 (JavaProject org/eclipse/jdt/internal/core/JavaProject.getAllPackageFragmentRoots()[Lor eFragmentRoot;+9 (JavaProject.java:1246) org/eclipse/jdt/internal/core/JavaProject.findPackageFragmentRoot0(Lorg/ec Lorg/eclipse/jdt/core/IPackageFragmentRoot;+1 (JavaProject.java:1022) org/eclipse/jdt/internal/core/JavaProject.findPackageFragmentRoot(Lorg/ecl org/eclipse/jdt/core/IPackageFragmentRoot;+5 (JavaProject.java:1013) com/ibm/etools/ejbdeploy/EJBDeployer.getGenerationOutputFolder(Lorg/eclips Thread: 00000501 Worker-0 TDE: B0039000078C4000 Thread priority: 5 Thread status: Running Thread group: main Runnable: org/eclipse/core/internal/jobs/Worker Stack: java/util/HashMap.containsKey(Ljava/lang/Object;)Z+30 (HashMap.java:342) java/util/HashSet.contains(Ljava/lang/Object;)Z+0 (HashSet.java:180) org/eclipse/jdt/internal/core/JavaModel.getTarget(Lorg/eclipse/core/resour e/core/runtime/IPath;Z)Ljava/lang/Object;+0 (JavaModel.java:336) org/eclipse/jdt/internal/core/ClasspathEntry.validateClasspathEntry(Lorg/e ct;Lorg/eclipse/jdt/core/IClasspathEntry;ZZ)Lorg/eclipse/jdt/core/IJav y.java:1000) org/eclipse/jdt/internal/core/JavaProject.getResolvedClasspath([Lorg/eclip y;Lorg/eclipse/core/runtime/IPath;ZZLjava/util/Map;)[Lorg/eclipse/jdt/ roject.java:1848) org/eclipse/jdt/internal/core/JavaProject.getResolvedClasspath(ZZZ)[Lorg/e Entry;+0 (JavaProject.java:1774) org/eclipse/jdt/internal/core/DeltaProcessor.updateClasspathMarkers(Lorg/e ourceDelta;Ljava/util/HashSet;Ljava/util/Map;Ljava/util/Map;)V+300 (De org/eclipse/jdt/internal/core/DeltaProcessor.updateClasspathMarkers(Lorg/e ourceDelta;Ljava/util/HashSet;Ljava/util/Map;Ljava/util/Map;)V+421 (De org/eclipse/jdt/internal/core/DeltaProcessor.updateClasspathMarkers(Lorg/e ourceDelta;)V+37 (DeltaProcessor.java:2170) org/eclipse/jdt/internal/core/DeltaProcessor.resourceChanged(Lorg/eclipse/ angeEvent;)V+318 (DeltaProcessor.java:1874) org/eclipse/jdt/internal/core/DeltaProcessingState.resourceChanged(Lorg/ec urceChangeEvent;)V+63 (DeltaProcessingState.java:414) org/eclipse/core/internal/events/NotificationManager$2.run()V+10 (Notifica org/eclipse/core/internal/runtime/InternalPlatform.run(Lorg/eclipse/core/r (InternalPlatform.java:616) Failing code in JavaModel.java ===> . . public static Object getTarget(IContainer container, IPath path, boolean checkResourceExistence) { if(path == null) return null; if(path.getDevice() == null) { IResource resource = container.findMember(path); if(resource != null) if(!checkResourceExistence || resource.exists()) return resource; else return null; } if(!path.isAbsolute()) return null; File externalFile = new File(path.toOSString()); if(!checkResourceExistence) return externalFile; if(existingExternalFiles.contains(externalFile)) <======= thread A, B reading global hashmap return externalFile; if(JavaModelManager.ZIP_ACCESS_VERBOSE) System.out.println("(" + Thread.currentThread() + ") [JavaModel.getTarget(...)] Checking existence of " + path.toString()); if(externalFile.exists()) { existingExternalFiles.add(externalFile); <===== unlocked threads C, D, E, ... updating global hashmap return externalFile; } else { return null; } } // end method . . public static HashSet existingExternalFiles = new HashSet(); <===== the unsynchronized global hashset . . Previous/original bug report follows => ================================================ 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])
+1 for backporting. Note that all upper streams should be fixed as well.
Created attachment 52919 [details] Proposed patch for R3_0_maintenance stream
Patch released in R3_0_maintenance stream. I've posted JDT/Core patch preview including this fix at: http://www.eclipse.org/jdt/core/r3.0/main.html#updates
(In reply to comment #2) > Created an attachment (id=52919) [details] > Proposed patch for R3_0_maintenance stream > Same patch released in R3_1_maintenance stream.
*** Bug 185355 has been marked as a duplicate of this bug. ***
Verified.