Bug 74289 - AIOOB Exception in WeakHashSet.cleanupGarbageCollectedValues
Summary: AIOOB Exception in WeakHashSet.cleanupGarbageCollectedValues
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-09-20 10:25 EDT by Markus Keller CLA
Modified: 2004-09-23 10:59 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2004-09-20 10:25:02 EDT
In the last two nightly builds, JDT/UI had failing performance tests:
http://fullmoon.rtp.raleigh.ibm.com/downloads/drops/N-N20040919-200409190010/performance/html/org.eclipse.jdt.ui.tests.refactoring_.html#RenameMethodPerfTests1
and
http://fullmoon.rtp.raleigh.ibm.com/downloads/drops/N-N20040920-200409200010/performance/html/org.eclipse.jdt.ui.tests.refactoring_.html#MoveStaticMembersPerfTests1

I think this is a concurrency / GC issue in WeakHashSet, since we didn't change
the tests since 20040917.

java.lang.ArrayIndexOutOfBoundsException: -1
at
org.eclipse.jdt.internal.compiler.util.WeakHashSet.cleanupGarbageCollectedValues(WeakHashSet.java:118)
at org.eclipse.jdt.internal.compiler.util.WeakHashSet.add(WeakHashSet.java:67)
at org.eclipse.jdt.internal.core.JavaModelManager.intern(JavaModelManager.java:1343)
at
org.eclipse.jdt.internal.core.JarPackageFragmentRoot.initPackageFragToTypes(JarPackageFragmentRoot.java:249)
at
org.eclipse.jdt.internal.core.JarPackageFragmentRoot.computeChildren(JarPackageFragmentRoot.java:97)
at
org.eclipse.jdt.internal.core.PackageFragmentRoot.buildStructure(PackageFragmentRoot.java:173)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:202)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:544)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:291)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:277)
at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:232)
at
org.eclipse.jdt.internal.core.JavaProjectElementInfo.getAllPackageFragments(JavaProjectElementInfo.java:182)
at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2279)
at
org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:53)
at
org.eclipse.jdt.internal.core.JavaProject.newSearchableNameEnvironment(JavaProject.java:2297)
at
org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.<init>(HierarchyBuilder.java:86)
at
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.<init>(IndexBasedHierarchyBuilder.java:96)
at
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:316)
at
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1243)
at
org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739)
at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:673)
at
org.eclipse.jdt.internal.corext.refactoring.rename.MethodChecks.isDeclaredInInterface(MethodChecks.java:98)
at
org.eclipse.jdt.internal.corext.refactoring.rename.RenameVirtualMethodProcessor.checkInitialConditions(RenameVirtualMethodProcessor.java:70)
at
org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkInitialConditions(ProcessorBasedRefactoring.java:113)
at
org.eclipse.ltk.core.refactoring.Refactoring.checkAllConditions(Refactoring.java:122)
at
org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:80)
at
org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:114)
at
org.eclipse.ltk.core.refactoring.PerformRefactoringOperation.run(PerformRefactoringOperation.java:103)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1674)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1694)
at
org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:46)
at
org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:38)
at
org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:34)
at
org.eclipse.jdt.ui.tests.refactoring.reorg.AbstractRenameMethodPerfTest.executeRefactoring(AbstractRenameMethodPerfTest.java:46)
at
org.eclipse.jdt.ui.tests.refactoring.reorg.RenameMethodPerfTests1.test_100_10(RenameMethodPerfTests1.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
at junit.extensions.TestSetup.run(TestSetup.java:23)
at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:320)
at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:196)
at org.eclipse.test.EclipseTestRunner.main(EclipseTestRunner.java:131)
at org.eclipse.test.UITestApplication$3.run(UITestApplication.java:180)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:106)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2760)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2445)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1435)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1406)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:263)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:144)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:102)
at org.eclipse.test.UITestApplication.runApplication(UITestApplication.java:123)
at org.eclipse.test.UITestApplication.run(UITestApplication.java:55)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
at org.eclipse.core.launcher.Main.run(Main.java:704)
at org.eclipse.core.launcher.Main.main(Main.java:688)
Comment 1 Jerome Lanneluc CLA 2004-09-20 12:05:03 EDT
Changed WeakHashSet#cleanupGarbageCollectedValues(...) to ensure that if the 
garbage collected value is at the last index, we wrap the index correctly and 
we don't attempt to get the value at -1.
Comment 2 Frederic Fusier CLA 2004-09-23 10:59:31 EDT
Verified for 3.1 M2 with build I200409230010.