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

Bug 333871

Summary: Race condition causes infinite loop
Product: [Eclipse Project] Platform Reporter: Gary Karasiuk <karasiuk>
Component: RuntimeAssignee: platform-runtime-inbox <platform-runtime-inbox>
Status: RESOLVED INVALID QA Contact:
Severity: major    
Priority: P3 CC: john.arthorne, mmartire, remy.suen
Version: 3.6.2   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
Yourkit snapshot none

Description Gary Karasiuk CLA 2011-01-10 09:39:19 EST
We are an adopting product, and we have a test scenario that sometimes goes into an infinite loop. 

The loop appears to be in one of these methods::
                at org/eclipse/core/internal/jobs/JobManager.findBlockingJob(Bytecode PC:92(Compiled Code))
                at org/eclipse/core/internal/jobs/JobManager.doRunNow(Bytecode PC:2(Compiled Code))

Here is a snapshot of the "hot" thread:

Worker-3 stack:

"Worker-3" J9VMThread:0x4611D100, j9thread_t:0x45A007FC, java/lang/Thread:0x0318E6B8, state:CW, prio=5
           (native thread ID:0xB4C, native priority:0x5, native policy:UNKNOWN)
          Java callstack:
                at org/eclipse/core/runtime/Path.isPrefixOf(Bytecode PC:105(Compiled Code))
                at org/eclipse/core/internal/resources/Resource.isConflicting(Bytecode PC:105(Compiled Code))
                at org/eclipse/core/runtime/jobs/MultiRule.isConflicting(Bytecode PC:92(Compiled Code))
                at org/eclipse/core/internal/jobs/InternalJob.isConflicting(Bytecode PC:92(Compiled Code))
                at org/eclipse/core/internal/jobs/JobManager.findBlockingJob(Bytecode PC:92(Compiled Code))
                at org/eclipse/core/internal/jobs/JobManager.doRunNow(Bytecode PC:2(Compiled Code))
                at org/eclipse/core/internal/jobs/JobManager.runNow(Bytecode PC:2(Compiled Code))
                at org/eclipse/core/internal/jobs/ThreadJob.waitForRun(Bytecode PC:77(Compiled Code))
                at org/eclipse/core/internal/jobs/ThreadJob.joinRun(Bytecode PC:68)
                at org/eclipse/core/internal/jobs/ImplicitJobs.begin(Bytecode PC:208(Compiled Code))
                at org/eclipse/core/internal/jobs/JobManager.beginRule(Bytecode PC:16(Compiled Code))
                at org/eclipse/ui/internal/ide/ContentTypeDecorator.decorate(Bytecode PC:16(Compiled Code))
                at org/eclipse/ui/internal/decorators/LightweightDecoratorDefinition.decorate(Bytecode PC:85(Compiled Code))
                at org/eclipse/ui/internal/decorators/LightweightDecoratorManager$LightweightRunnable.run(Bytecode PC:12(Compiled Code))
                at org/eclipse/core/runtime/SafeRunner.run(Bytecode PC:7(Compiled Code))
                at org/eclipse/ui/internal/decorators/LightweightDecoratorManager.decorate(Bytecode PC:14(Compiled Code))
                at org/eclipse/ui/internal/decorators/LightweightDecoratorManager.getDecorations(Bytecode PC:14(Compiled Code))
                at org/eclipse/ui/internal/decorators/DecorationScheduler$1.ensureResultCached(Bytecode PC:87(Compiled Code))
                at org/eclipse/ui/internal/decorators/DecorationScheduler$1.run(Bytecode PC:146)
                at org/eclipse/core/internal/jobs/Worker.run(Bytecode PC:31(Compiled Code))
Comment 1 Gary Karasiuk CLA 2011-01-10 09:42:55 EST
Created attachment 186393 [details]
Yourkit snapshot

This is a Yourkit snapshot, that was taken during the loop. 

I'm unsure of the exact Eclipse driver, but the driver would have been a little earlier than 2010/12/10.
Comment 2 Gary Karasiuk CLA 2011-01-10 09:57:38 EST
We also have full crash dump (from which you can see call of the values in the heap), which I can send, if it would be helpful.
Comment 3 John Arthorne CLA 2011-02-09 12:59:46 EST
I have a suspicion this is related to bug 320329. In that bug, there is a situation in which ThreadJob#waitForRun enters into a busy wait loop with no sleeping. This condition is very CPU intensive and would have execution stacks looking like the one attached here. 

The only difference here is the "infinite" part... In bug 320329 there is no infinite loop, just a busy-wait loop that will eventually complete. So, can you confirm that in your case the loop never exits? How long did you wait for it? If you can still reproduce, it would also be worth trying another run with the fix for bug 320329 to see if the problem is the same.
Comment 4 Matthew Martire CLA 2011-02-09 16:13:32 EST
I havent been able to reproduce this loop in any of the test scenarios that previously produced it. I suggest closing this for now, and if it reappears then we can re-open and investigate further.
Comment 5 John Arthorne CLA 2011-02-09 16:55:02 EST
(In reply to comment #4)
> I havent been able to reproduce this loop in any of the test scenarios that
> previously produced it. I suggest closing this for now, and if it reappears
> then we can re-open and investigate further.

Ok.