Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 331547

Summary: Race condition on ResourceSet adapter list
Product: [WebTools] WTP Common Tools Reporter: Chuck Bridgham <cbridgha>
Component: wst.commonAssignee: Chuck Bridgham <cbridgha>
Status: RESOLVED FIXED QA Contact: Carl Anderson <ccc>
Severity: normal    
Priority: P3 Flags: ccc: review+
Version: unspecified   
Target Milestone: 3.2.3   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Attachments:
Description Flags
patch none

Description Chuck Bridgham CLA 2010-12-01 09:53:45 EST
The following exception is caused by competing threads:

!ENTRY org.eclipse.jst.j2ee 4 0 2010-11-17 10:05:51.984
!MESSAGE 
!STACK 0
java.lang.ArrayIndexOutOfBoundsException
	at org.eclipse.emf.common.util.BasicEList.assign(BasicEList.java:124)
	at org.eclipse.emf.common.util.BasicEList.addUnique(BasicEList.java:424)
	at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:307)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl$EAdapterList.add(BasicNotifierImpl.java:199)
	at org.eclipse.jst.j2ee.model.ModelProviderManager.startListeningToResourceSet(ModelProviderManager.java:270)
	at org.eclipse.jst.j2ee.model.ModelProviderManager.getModelProvider(ModelProviderManager.java:95)
	at org.eclipse.jst.j2ee.model.ModelProviderManager.getModelProvider(ModelProviderManager.java:281)
	at org.eclipse.jst.j2ee.project.EarUtilities.getEARLibDir(EarUtilities.java:489)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.getBaseEARLibRefs(J2EEComponentClasspathContainer.java:315)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.update(J2EEComponentClasspathContainer.java:208)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathContainer.install(J2EEComponentClasspathContainer.java:385)
	at org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathInitializer.initialize(J2EEComponentClasspathInitializer.java:48)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2707)
	at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2613)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2653)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1845)
Comment 1 Chuck Bridgham CLA 2010-12-01 09:59:13 EST
A common fix for this is using a "synchronized" adapter List that internally locks the list while accessing.  This same fix has solved many similar problems.

Unfortunately - the patch file contains patches from bug 330874
Comment 2 Chuck Bridgham CLA 2010-12-01 09:59:40 EST
Created attachment 184265 [details]
patch
Comment 3 Chuck Bridgham CLA 2010-12-02 10:19:46 EST
thanks dropped to build