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

Bug 475227

Summary: Data race on org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.preferences
Product: [Eclipse Project] JDT Reporter: Yilong Li <yilong.li>
Component: CoreAssignee: JDT-Core-Inbox <jdt-core-inbox>
Status: CLOSED WONTFIX QA Contact:
Severity: normal    
Priority: P3    
Version: 4.6   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard: stalebug

Description Yilong Li CLA 2015-08-18 01:38:44 EDT
Here is the race report given by a dynamic race detector:
Data race on field org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.preferences: {{{
    Concurrent write in thread T1 (locks held: {Monitor@40866d39})
 ---->  at org.eclipse.jdt.internal.core.JavaProject.getEclipsePreferences(JavaProject.java:1492)
        at org.eclipse.jdt.internal.core.JavaProject.getOption(JavaProject.java:1657)
        at org.eclipse.jdt.internal.core.ClasspathEntry.validateClasspath(ClasspathEntry.java:1747)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.verify(SetClasspathOperation.java:118)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:783)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3097)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3059)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3112)
        at org.eclipse.jdt.testplugin.JavaProjectHelper.createJavaProject(JavaProjectHelper.java:166)
        at org.eclipse.jdt.text.tests.CompilationUnitDocumentProviderTest.setupProject(CompilationUnitDocumentProviderTest.java:54)
        at org.eclipse.jdt.text.tests.CompilationUnitDocumentProviderTest.test2(CompilationUnitDocumentProviderTest.java:86)
        at junit.framework.TestCase.runTest(TestCase.java:176)
        at junit.framework.TestCase.runBare(TestCase.java:141)
        at junit.framework.TestResult$1.protect(TestResult.java:122)
        at junit.framework.TestResult.runProtected(TestResult.java:142)
        at junit.framework.TestResult.run(TestResult.java:125)
        at junit.framework.TestCase.run(TestCase.java:129)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:692)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:319)
        at org.eclipse.test.UITestApplication$2.run(UITestApplication.java:197)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
        - locked Monitor@40866d39 at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:131) 
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3794)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3433)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:157)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
        at org.eclipse.test.UITestApplication.runApplication(UITestApplication.java:140)
        at org.eclipse.test.UITestApplication.run(UITestApplication.java:62)
        at org.eclipse.test.UITestApplication.start(UITestApplication.java:212)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
        at org.eclipse.core.launcher.Main.main(Main.java:34)
    T1 is the main thread

    Concurrent write in thread T30 (locks held: {})
 ---->  at org.eclipse.jdt.internal.core.JavaProject.getEclipsePreferences(JavaProject.java:1492)
        at org.eclipse.jdt.internal.core.JavaProject.getOption(JavaProject.java:1657)
        at org.eclipse.jdt.internal.core.JavaModelManager.determineIfOnClasspath(JavaModelManager.java:1041)
        at org.eclipse.jdt.internal.core.JavaModelManager.createCompilationUnitFrom(JavaModelManager.java:979)
        at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManager.java:898)
        at org.eclipse.jdt.internal.core.JavaModelManager.create(JavaModelManager.java:862)
        at org.eclipse.jdt.core.JavaCore.create(JavaCore.java:3208)
        at org.eclipse.jdt.internal.ui.BuildpathIndicatorLabelDecorator.getOverlay(BuildpathIndicatorLabelDecorator.java:46)
        at org.eclipse.jdt.internal.ui.BuildpathIndicatorLabelDecorator.decorate(BuildpathIndicatorLabelDecorator.java:32)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:260)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:83)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:367)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:349)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:367)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:327)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
    T30 is created by T29
        at org.eclipse.core.internal.jobs.WorkerPool.jobQueued(WorkerPool.java:148)
}}}

Two threads are writing to this field concurrently.
Comment 1 Yilong Li CLA 2015-08-20 23:17:21 EDT
There are races on outputLocation and rawClasspath as well:

Data race on field org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.outputLocation: {{{
    Concurrent write in thread T1 (locks held: {Monitor@473e4597})
 ---->  at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setClasspath(JavaModelManager.java:1222)
        at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setResolvedClasspath(JavaModelManager.java:1256)
        - locked Monitor@473e4597 at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setResolvedClasspath(JavaModelManager.java:n/a) 
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2863)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1962)
        at org.eclipse.jdt.internal.core.DeltaProcessingState.getRootInfos(DeltaProcessingState.java:311)
        at org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots(DeltaProcessingState.java:256)
        at org.eclipse.jdt.internal.core.DeltaProcessor.processResourceDelta(DeltaProcessor.java:1858)
        at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:2059)
        at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:477)
        at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
        at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
        at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:374)
        at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1471)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2251)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:794)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3097)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3059)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3112)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.setClasspath(TestingEnvironment.java:1048)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addEntry(TestingEnvironment.java:285)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addExternalJars(TestingEnvironment.java:265)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addExternalJars(TestingEnvironment.java:253)
        at org.eclipse.jdt.core.tests.builder.BasicBuildTests.testTags(BasicBuildTests.java:177)
        at junit.framework.TestCase.runTest(TestCase.java:176)
        at junit.framework.TestCase.runBare(TestCase.java:141)
        at junit.framework.TestResult$1.protect(TestResult.java:122)
        at junit.framework.TestResult.runProtected(TestResult.java:142)
        at junit.framework.TestResult.run(TestResult.java:125)
        at junit.framework.TestCase.run(TestCase.java:129)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:692)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:319)
        at org.eclipse.test.CoreTestApplication.runTests(CoreTestApplication.java:36)
        at org.eclipse.test.CoreTestApplication.run(CoreTestApplication.java:32)
        at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
        at org.eclipse.core.launcher.Main.main(Main.java:34)
    T1 is the main thread

    Concurrent read in thread T29 (locks held: {})
 ---->  at org.eclipse.jdt.internal.core.JavaProject.getOutputLocation(JavaProject.java:1737)
        at org.eclipse.jdt.internal.core.search.indexing.IndexAllProject.execute(IndexAllProject.java:125)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:405)
    T29 is created by T1
        at org.eclipse.jdt.internal.core.search.processing.JobManager.reset(JobManager.java:331)
}}}

Data race on field org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.rawClasspath: {{{
    Concurrent write in thread T1 (locks held: {Monitor@72e70c3d})
 ---->  at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setClasspath(JavaModelManager.java:1221)
        at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setResolvedClasspath(JavaModelManager.java:1256)
        - locked Monitor@72e70c3d at org.eclipse.jdt.internal.core.JavaModelManager$PerProjectInfo.setResolvedClasspath(JavaModelManager.java:n/a) 
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2863)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1962)
        at org.eclipse.jdt.internal.core.ProjectReferenceChange.updateProjectReferencesIfNecessary(ProjectReferenceChange.java:47)
        at org.eclipse.jdt.internal.core.ChangeClasspathOperation.classpathChanged(ChangeClasspathOperation.java:59)
        at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(SetClasspathOperation.java:74)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:729)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2242)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:794)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3097)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3059)
        at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3112)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.setClasspath(TestingEnvironment.java:1048)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addEntry(TestingEnvironment.java:285)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addExternalJars(TestingEnvironment.java:265)
        at org.eclipse.jdt.core.tests.builder.TestingEnvironment.addExternalJars(TestingEnvironment.java:253)
        at org.eclipse.jdt.core.tests.builder.BasicBuildTests.testUnusedImport(BasicBuildTests.java:318)
        at junit.framework.TestCase.runTest(TestCase.java:176)
        at junit.framework.TestCase.runBare(TestCase.java:141)
        at junit.framework.TestResult$1.protect(TestResult.java:122)
        at junit.framework.TestResult.runProtected(TestResult.java:142)
        at junit.framework.TestResult.run(TestResult.java:125)
        at junit.framework.TestCase.run(TestCase.java:129)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at junit.framework.TestSuite.runTest(TestSuite.java:252)
        at junit.framework.TestSuite.run(TestSuite.java:247)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:692)
        at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:319)
        at org.eclipse.test.CoreTestApplication.runTests(CoreTestApplication.java:36)
        at org.eclipse.test.CoreTestApplication.run(CoreTestApplication.java:32)
        at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
        at org.eclipse.core.launcher.Main.main(Main.java:34)
    T1 is the main thread

    Concurrent read in thread T29 (locks held: {})
 ---->  at org.eclipse.jdt.internal.core.JavaProject.getRawClasspath(JavaProject.java:1932)
        at org.eclipse.jdt.internal.core.search.indexing.IndexAllProject.execute(IndexAllProject.java:65)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:405)
    T29 is created by T1
        at org.eclipse.jdt.internal.core.search.processing.JobManager.reset(JobManager.java:331)
}}}
Comment 2 Eclipse Genie CLA 2020-03-28 12:41:13 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. As such, we're closing this bug.

If you have further information on the current state of the bug, please add it and reopen this bug. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.