Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 331547 - Race condition on ResourceSet adapter list
Summary: Race condition on ResourceSet adapter list
Status: RESOLVED FIXED
Alias: None
Product: WTP Common Tools
Classification: WebTools
Component: wst.common (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: 3.2.3   Edit
Assignee: Chuck Bridgham CLA
QA Contact: Carl Anderson CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-12-01 09:53 EST by Chuck Bridgham CLA
Modified: 2010-12-02 10:19 EST (History)
0 users

See Also:
ccc: review+


Attachments
patch (10.70 KB, patch)
2010-12-01 09:59 EST, Chuck Bridgham CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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