Closed Bug 399554 Opened 17 years ago Closed 16 years ago

ASSERTION: cannot call on a dirty frame not currently being reflowed: '!NS_SUBTREE_DIRTY(this) || (GetStateBits() & NS_FRAME_IN_REFLOW)', file c:/Mozilla/suite2/layout/generic/nsFrame.cpp, line 556

Categories

(Core :: Layout, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 399352

People

(Reporter: surkov, Unassigned)

References

Details

When I click on menu of firefox or seamonkey then often I get the following assertion.

ASSERTION: cannot call on a dirty frame not currently being reflowed: '!NS_SUBTREE_DIRTY(this) || (GetStateBits() & NS_FRAME_IN_REFLOW)', file c:/Mozilla/suite2/layout/generic/nsFrame.cpp, line 556
---------------------------

Stack trace:

>	gklayout.dll!nsIFrame::GetUsedBorder()  Line 556 + 0x38	C++
 	gklayout.dll!nsIFrame::GetPaddingRect()  Line 643	C++
 	gklayout.dll!ApplyOverflowClipping(nsDisplayListBuilder * aBuilder=0x0012efc8, nsIFrame * aFrame=0x03c0f8ac, const nsStyleDisplay * aDisp=0x03c0f768, nsRect * aRect=0x0012ebec)  Line 1007 + 0x32	C++
 	gklayout.dll!nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder * aBuilder=0x0012efc8, nsIFrame * aChild=0x03c0f8ac, const nsRect & aDirtyRect={...}, const nsDisplayListSet & aLists={...}, unsigned int aFlags=0x00000000)  Line 1356 + 0x15	C++
 	gklayout.dll!nsBoxFrame::BuildDisplayListForChildren(nsDisplayListBuilder * aBuilder=0x0012efc8, const nsRect & aDirtyRect={...}, const nsDisplayListSet & aLists={...})  Line 1299 + 0x1a	C++
 	gklayout.dll!nsRootBoxFrame::BuildDisplayList(nsDisplayListBuilder * aBuilder=0x0012efc8, const nsRect & aDirtyRect={...}, const nsDisplayListSet & aLists={...})  Line 251	C++
 	gklayout.dll!nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder * aBuilder=0x0012efc8, nsIFrame * aChild=0x03c0f5c0, const nsRect & aDirtyRect={...}, const nsDisplayListSet & aLists={...}, unsigned int aFlags=0x00000000)  Line 1374 + 0x18	C++
 	gklayout.dll!ViewportFrame::BuildDisplayList(nsDisplayListBuilder * aBuilder=0x0012efc8, const nsRect & aDirtyRect={...}, const nsDisplayListSet & aLists={...})  Line 110	C++
 	gklayout.dll!nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder * aBuilder=0x0012efc8, const nsRect & aDirtyRect={...}, nsDisplayList * aList=0x0012efc0)  Line 1165 + 0x1e	C++
 	gklayout.dll!nsLayoutUtils::GetFrameForPoint(nsIFrame * aFrame=0x03c0f458, nsPoint aPt={...}, int aShouldIgnoreSuppression=0x00000000)  Line 760 + 0x14	C++
 	gklayout.dll!PresShell::HandleEvent(nsIView * aView=0x03c0b298, nsGUIEvent * aEvent=0x0012f320, nsEventStatus * aEventStatus=0x0012f0d4)  Line 5482 + 0x19	C++
 	gklayout.dll!nsViewManager::HandleEvent(nsView * aView=0x03c0b298, nsPoint aPoint={...}, nsGUIEvent * aEvent=0x0012f320, int aCaptured=0x00000000)  Line 1295	C++
 	gklayout.dll!nsViewManager::DispatchEvent(nsGUIEvent * aEvent=0x0012f320, nsEventStatus * aStatus=0x0012f20c)  Line 1248 + 0x22	C++
 	gklayout.dll!HandleEvent(nsGUIEvent * aEvent=0x0012f320)  Line 171	C++
 	gkwidget.dll!nsWindow::DispatchEvent(nsGUIEvent * event=0x0012f320, nsEventStatus & aStatus=nsEventStatus_eIgnore)  Line 1075 + 0xa	C++
 	gkwidget.dll!nsWindow::DispatchWindowEvent(nsGUIEvent * event=0x0012f320)  Line 1096	C++
 	gkwidget.dll!nsWindow::DispatchMouseEvent(unsigned int aEventType=0x0000012c, unsigned int wParam=0x00000000, long lParam=0x000400ae, int aIsContextMenuKey=0x00000000, short aButton=0x0000)  Line 5960 + 0x18	C++
 	gkwidget.dll!ChildWindow::DispatchMouseEvent(unsigned int aEventType=0x0000012c, unsigned int wParam=0x00000000, long lParam=0x000400ae, int aIsContextMenuKey=0x00000000, short aButton=0x0000)  Line 6142	C++
 	gkwidget.dll!nsWindow::ProcessMessage(unsigned int msg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000400ae, long * aRetValue=0x0012f7c8)  Line 4379 + 0x22	C++
 	gkwidget.dll!nsWindow::WindowProc(HWND__ * hWnd=0x005f02e8, unsigned int msg=0x00000200, unsigned int wParam=0x00000000, long lParam=0x000400ae)  Line 1288 + 0x1b	C++
I've the same problem on OpenSolaris and Ubuntu.

When I move mouse from File menu to Edit menu, my box beeps about 18 times.
It's really annoying for debugging.

OS: Windows XP → All
I get a few hundreds of these when running "perl runtests" to run mochitests.
Blocks: 404077
In a CMS project, we use xulrunner with remote, eval'ed JS code to add lots of elements to an initially empty xul window. We get lot's and lot's of these asserts using a debug build. We also experience a lot of crashes. The exact amount differs  from build to build. Also these asserts seem to occur on random base. It is very hard to produce a testcase but we're trying very hard to do so. At the moment this bug is preventing us from using Xulrunner in a production environment because it strongly affects the stability of our project.

The exact error that can be found in the console hundreds of times is:

WARNING: recurring into frame construction: 'mPresContext->mLayoutPhaseCount[eLa
youtPhase_FrameC] == 0', file c:\mozilla\layout\base\nsPresContext.h, line 940

If any of you guys need more info I'm willing to help out because we really need this bug fixed.
Tom: to turn off the assertion dialog on Windows, use "set XPCOM_DEBUG_BREAK=warn".  Layout assertion failures shouldn't stop you from using a debug build :)  The crashes you're experiencing are probably unrelated to this bug.
Thanks for the info Jess. The reason I think the crash is related to the assert message is that it crashes in the release build where there would be lot's of those messages in the debug build. Would there be any way to determine both things corelate?
File a new bug report with steps to reproduce and/or a stack trace?
I agree that would be a logical step. But it's quite impossible to reproduce it 100%. All i know it occurs when lot's of elements are added dynamicly with javascript and these additions happen with multiple js function calls. So far we were not able to make a minimal testcase in which the crash occurs, that's why I was wondering if it wouldn't have anything to do with this report.
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.