Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 348573 - Deadlock between BinaryRunner and project model serializing lock
Summary: Deadlock between BinaryRunner and project model serializing lock
Status: RESOLVED FIXED
Alias: None
Product: CDT
Classification: Tools
Component: cdt-core (show other bugs)
Version: 7.0.2   Edit
Hardware: All All
: P3 major (vote)
Target Milestone: 8.0.1   Edit
Assignee: Anton Leherbauer CLA
QA Contact: Doug Schaefer CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-06-07 10:22 EDT by Anton Leherbauer CLA
Modified: 2011-06-29 09:35 EDT (History)
3 users (show)

See Also:


Attachments
Patch (1.42 KB, patch)
2011-06-09 06:32 EDT, Anton Leherbauer CLA
aleherb+eclipse: iplog-
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Leherbauer CLA 2011-06-07 10:22:08 EDT
"Worker-80" prio=10 tid=0x0a1eb000 nid=0x2ad2 in Object.wait() [0x8c006000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:39)
        - locked <0x96128e48> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:176)
        at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:110)
        at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:84)
        at org.eclipse.cdt.internal.core.settings.model.xml.XmlProjectDescriptionStorage.getProjectDescription(XmlProjectDescriptionStorage.java:224)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescriptionInternal(CProjectDescriptionManager.java:416)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:398)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:393)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:386)
        at org.eclipse.cdt.internal.core.model.CProject.computeSourceRoots(CProject.java:603)
        at org.eclipse.cdt.internal.core.model.CProject.getAllSourceRoots(CProject.java:503)
        at org.eclipse.cdt.internal.core.model.CProject.findSourceRoot(CProject.java:465)
        at org.eclipse.cdt.internal.core.model.CModelManager.create(CModelManager.java:377)
        at org.eclipse.cdt.internal.core.model.BinaryRunner$Visitor.visit(BinaryRunner.java:223)
        at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86)
        at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127)
        at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74)
        at org.eclipse.cdt.internal.core.model.BinaryRunner$1.run(BinaryRunner.java:122)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

"Worker-78" prio=10 tid=0x8a126000 nid=0x29ce in Object.wait() [0x8c14a000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:39)
        - locked <0x960c6e88> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:847)
        at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:380)
        at org.eclipse.core.runtime.jobs.Job.join(Job.java:385)
        at org.eclipse.cdt.internal.core.model.BinaryRunner.waitIfRunning(BinaryRunner.java:157)
        at org.eclipse.cdt.internal.core.model.BinaryRunner.stop(BinaryRunner.java:170)
        at org.eclipse.cdt.internal.core.model.CModelManager.removeBinaryRunner(CModelManager.java:805)
        at org.eclipse.cdt.internal.core.model.CModelManager.removeBinaryRunner(CModelManager.java:796)
        at org.eclipse.cdt.internal.core.model.CProject.closing(CProject.java:734)
        at org.eclipse.cdt.internal.core.model.CModelManager.releaseCElement(CModelManager.java:539)
        at org.eclipse.cdt.internal.core.model.CElement.close(CElement.java:381)
        at org.eclipse.cdt.internal.core.settings.model.PathEntryConfigurationDataProvider.createData(PathEntryConfigurationDataProvider.java:336)
        at org.eclipse.cdt.internal.core.settings.model.PathEntryConfigurationDataProvider.createData(PathEntryConfigurationDataProvider.java:274)
        at org.eclipse.cdt.internal.core.settings.model.PathEntryConfigurationDataProvider.loadConfiguration(PathEntryConfigurationDataProvider.java:363)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.loadData(CProjectDescriptionManager.java:1115)
        at org.eclipse.cdt.internal.core.settings.model.CConfigurationDescriptionCache.loadData(CConfigurationDescriptionCache.java:95)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescription.loadDatas(CProjectDescription.java:196)
        at org.eclipse.cdt.internal.core.settings.model.xml.XmlProjectDescriptionStorage.loadProjectDescription(XmlProjectDescriptionStorage.java:486)
        at org.eclipse.cdt.internal.core.settings.model.xml.XmlProjectDescriptionStorage.getProjectDescription(XmlProjectDescriptionStorage.java:231)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescriptionInternal(CProjectDescriptionManager.java:416)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:398)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:393)
        at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:386)
        at org.eclipse.cdt.internal.ui.viewsupport.ExcludedFileDecorator.decorate(ExcludedFileDecorator.java:40)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Note that this specific deadlock can only occur with "old-style" C/C++ projects.
It looks like this can be easily solved by waiting for the BinaryRunner in CProject.closing() before flushing the project info cache, so that the BinaryRunner does not try to recreate the cache.
Comment 1 Anton Leherbauer CLA 2011-06-07 10:32:50 EDT
Related to bug 296562.
Comment 2 Martin Oberhuber CLA 2011-06-08 18:18:59 EDT
CQ:WIND00276703
Comment 3 Anton Leherbauer CLA 2011-06-09 06:32:17 EDT
Created attachment 197679 [details]
Patch

That's the simple fix described above.
Comment 4 Anton Leherbauer CLA 2011-06-29 09:35:44 EDT
Fixed in master and cdt_8_0.