Bug 162517 - [model] concurrent access to HashMap
Summary: [model] concurrent access to HashMap
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0.2   Edit
Hardware: Other other
: P2 normal (vote)
Target Milestone: 3.0.1   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 185355 (view as bug list)
Depends on:
Blocks:
 
Reported: 2006-10-26 23:44 EDT by Dennis S CLA
Modified: 2011-01-25 11:06 EST (History)
5 users (show)

See Also:


Attachments
Proposed patch for R3_0_maintenance stream (906 bytes, patch)
2006-10-30 04:16 EST, Frederic Fusier CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dennis S CLA 2006-10-26 23:44:10 EDT
+++ 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])
Comment 1 Philipe Mulet CLA 2006-10-27 05:26:19 EDT
+1 for backporting. Note that all upper streams should be fixed as well.
Comment 2 Frederic Fusier CLA 2006-10-30 04:16:59 EST
Created attachment 52919 [details]
Proposed patch for R3_0_maintenance stream
Comment 3 Frederic Fusier CLA 2006-10-31 11:32:28 EST
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
Comment 4 Frederic Fusier CLA 2007-03-26 14:08:36 EDT
(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.
Comment 5 Frederic Fusier CLA 2007-05-03 11:51:50 EDT
*** Bug 185355 has been marked as a duplicate of this bug. ***
Comment 6 Olivier Thomann CLA 2011-01-25 11:06:24 EST
Verified.