Closed Bug 967989 Opened 12 years ago Closed 11 years ago

Faulty: main process hang with main thread stuck in PCompositorChild::SendFlushRendering after non-fatal assert failures "aChild already in the tree" and "aChild already has siblings?"

Categories

(Core :: Graphics: Layers, defect)

x86_64
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla30
Tracking Status
firefox30 --- fixed

People

(Reporter: bjacob, Assigned: bjacob)

References

(Blocks 1 open bug)

Details

Attachments

(3 files)

Attached file Faulty session
Found by Christoph Diehl's "Faulty" fuzzer, see bug 777067 Hit while running css-gradients reftest.
The log has these just before the hang: [Parent 3649] ###!!! ASSERTION: aChild already in the tree: '!aChild->GetParent()', file /hack/mozilla-central/gfx/layers/Layers.cpp, line 724 [Parent 3649] ###!!! ASSERTION: aChild already has siblings?: '!aChild->GetNextSibling() && !aChild->GetPrevSibling()', file /hack/mozilla-central/gfx/layers/Layers.cpp, line 726 This implies a bad layer tree is being built, in which case it's totally expected that UpdatePanZoomControllerTree will go off into the weeds and never come back. We should track down why those assertions are getting tripped. There was a similar issue recently in bug 950301 (see comment 15 there) where a bad layer tree was being built and causing an infinite loop in UpdatePanZoomControllerTree. The reason it happens there rather than other places is because we walk the tree backwards which other code doesn't do, so we exercise a different set of links than most.
Component: Graphics → Graphics: Layers
If failure of these assertions can lead to hangs, would it then be reasonable to make these assertions fatal, so we can more easily understand why they fail?
Flags: needinfo?(roc)
Actually, I just reproduced a similar hang, still with the main thread stuck in PCompositorChild::SendFlushRendering, still just after failing these assertions, but now the compositor thread is in a different place, probably meaning that APZC is a red herring. Attaching new session...
Summary: Faulty: main process hang with main thread stuck in PCompositorChild::SendFlushRendering and compositor thread in APZCTreeManager::UpdatePanZoomControllerTree → Faulty: main process hang with main thread stuck in PCompositorChild::SendFlushRendering after non-fatal assert failures "aChild already in the tree" and "aChild already has siblings?"
(In reply to Benoit Jacob [:bjacob] from comment #2) > If failure of these assertions can lead to hangs, would it then be > reasonable to make these assertions fatal, so we can more easily understand > why they fail? I don't see how that would help understand why they fail.
Flags: needinfo?(roc)
That would conceivably help as we would then get a stack trace when they fail. However, I have made that change locally so I will get that the next time that I hit this bug. Nothing needs to land here.
Depends on: 970747
Fixed by the landing of shadow layer updates validation fixes, bug 970747.
Assignee: nobody → bjacob
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: