Closed Bug 153429 Opened 22 years ago Closed 22 years ago

CPU goes up to 100% when this page loads

Categories

(Core :: Layout, defect, P1)

defect

Tracking

()

RESOLVED FIXED
mozilla1.2alpha

People

(Reporter: garth, Assigned: dbaron)

References

()

Details

(Keywords: hang, Whiteboard: [patch])

Attachments

(4 files, 4 obsolete files)

From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-TW; rv:1.1a) Gecko/20020611
BuildID:    2002061104

CPU maxes out and browser is hung when I try to view this page
http://www.td.com/hr/it.html

Works ok in IE5

Reproducible: Always
Steps to Reproduce:
1. open Mozilla
2. go to http://www.td.com/hr/it.html
3. kill, rest, repeat
Confirming 100% CPU and hang, 20020617 trunk, winXP.

There's a fair bit of javascript in there, including a fairly serious attempt at
browser sniffing.

My _guess_ is that there's something nasty in the javascript going into some
kind of infinite loop
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: hang
conmfirming with win2k build 20020620 (my debug crashes and my optimized hangs)

WARNING: NS_ENSURE_TRUE(NS_SUCCEEDED(result)) failed, file d:/moz_source/gmake/m
ozilla/htmlparser/src/nsHTMLTokens.cpp, line 342
WARNING: NS_ENSURE_TRUE(NS_SUCCEEDED(result)) failed, file d:/moz_source/gmake/m
ozilla/htmlparser/src/nsHTMLTokenizer.cpp, line 799
Block(td)(0)@05F86234: yikes! spinning on a line over 1000 times!

nsDebug::Abort(const char * 0x021675b8, int 3469) line 413 + 3 bytes
nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator 
{...}, int * 0x00127e6c, int 0, int 0) line 3469 + 16 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, 
int * 0x00127e6c, int 0) line 2609 + 33 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2253 + 31 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x05f86234, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 949 + 15 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f86234, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 
15, int 15, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableCellFrame::Reflow(nsTableCellFrame * const 0x05f861d4, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 946
nsContainerFrame::ReflowChild(nsIFrame * 0x05f861d4, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowFrame::ReflowChildren(nsTableRowFrame * const 0x05f860bc, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, nsTableFrame & {...}, unsigned int & 0, int 0) line 
1041 + 45 bytes
nsTableRowFrame::Reflow(nsTableRowFrame * const 0x05f860bc, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1448 + 37 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f860bc, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowGroupFrame::ReflowChildren(nsTableRowGroupFrame * const 0x05f11c7c, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, nsRowGroupReflowState 
& {...}, unsigned int & 0, nsTableRowFrame * 0x00000000, int 0, nsTableRowFrame 
* * 0x00000000, int * 0x00128be4) line 444 + 45 bytes
nsTableRowGroupFrame::Reflow(nsTableRowGroupFrame * const 0x05f11c7c, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1214 + 35 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f11c7c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableFrame::ReflowChildren(nsTableFrame * const 0x05f85f6c, nsIPresContext * 
0x03bdd798, nsTableReflowState & {...}, int 1, int 0, unsigned int & 0, nsIFrame 
* & 0x00000000, int * 0x00000000) line 3311 + 53 bytes
nsTableFrame::ReflowTable(nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & 
{...}, const nsHTMLReflowState & {...}, int 1073741824, nsReflowReason 
eReflowReason_Resize, nsIFrame * & 0x00000000, int & 0, int & 1, unsigned int & 
0) line 2207
nsTableFrame::Reflow(nsTableFrame * const 0x05f85f6c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 2073
nsContainerFrame::ReflowChild(nsIFrame * 0x05f85f6c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 3, unsigned int & 0) line 802 + 31 bytes
nsTableOuterFrame::OuterReflowChild(nsTableOuterFrame * const 0x05f85da0, 
nsIPresContext * 0x03bdd798, nsIFrame * 0x05f85f6c, const nsHTMLReflowState & 
{...}, nsHTMLReflowMetrics & {...}, int * 0x00000000, nsSize & {...}, nsMargin & 
{...}, nsMargin & {...}, nsMargin & {...}, nsReflowReason eReflowReason_Resize, 
unsigned int & 0) line 1026 + 47 bytes
nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x05f85da0, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1611 + 72 bytes
nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState & {...}, nsReflowReason 
eReflowReason_Resize, nsIFrame * 0x05f85da0, const nsRect & {...}, int 1, 
nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) line 569 
+ 36 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x05f85da0, const nsRect & {...}, 
int 1, nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) 
line 345 + 50 bytes
nsBlockFrame::ReflowFloater(nsBlockReflowState & {...}, nsPlaceholderFrame * 
0x05f90b08, nsRect & {...}, nsMargin & {...}, nsMargin & {...}, unsigned int & 
0) line 5311 + 49 bytes
nsBlockReflowState::FlowAndPlaceFloater(nsFloaterCache * 0x05f62790, int * 
0x00129a80, unsigned int & 0) line 882
nsBlockReflowState::AddFloater(nsLineLayout & {...}, nsPlaceholderFrame * 
0x05f90b08, int 0, unsigned int & 0) line 684
nsLineLayout::AddFloater(nsPlaceholderFrame * 0x05f90b08, unsigned int & 0) line 
235
nsLineLayout::ReflowFrame(nsIFrame * 0x05f90b08, unsigned int & 0, 
nsHTMLReflowMetrics * 0x00000000, int & 0) line 1173
nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & 
{...}, nsLineList_iterator {...}, nsIFrame * 0x05f90b08, unsigned char * 
0x00129d4c) line 3749 + 22 bytes
nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & 
{...}, nsLineList_iterator {...}, int * 0x0012a470, unsigned char * 0x0012a248, 
int 0, int 0) line 3625 + 32 bytes
nsBlockFrame::DoReflowInlineFramesAuto(nsBlockReflowState & {...}, 
nsLineList_iterator {...}, int * 0x0012a470, unsigned char * 0x0012a248, int 0, 
int 0) line 3515 + 46 bytes
nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator 
{...}, int * 0x0012a470, int 0, int 0) line 3459 + 36 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, 
int * 0x0012a470, int 0) line 2609 + 33 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2253 + 31 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x05f85b10, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 949 + 15 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f85b10, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableCellFrame::Reflow(nsTableCellFrame * const 0x05f85ab0, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 946
nsContainerFrame::ReflowChild(nsIFrame * 0x05f85ab0, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 
2355, int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowFrame::ReflowChildren(nsTableRowFrame * const 0x05f3ad9c, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, nsTableFrame & {...}, unsigned int & 0, int 0) line 
1041 + 45 bytes
nsTableRowFrame::Reflow(nsTableRowFrame * const 0x05f3ad9c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1448 + 37 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f3ad9c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowGroupFrame::ReflowChildren(nsTableRowGroupFrame * const 0x05f11c04, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, nsRowGroupReflowState 
& {...}, unsigned int & 0, nsTableRowFrame * 0x00000000, int 0, nsTableRowFrame 
* * 0x00000000, int * 0x0012b1e8) line 444 + 45 bytes
nsTableRowGroupFrame::Reflow(nsTableRowGroupFrame * const 0x05f11c04, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1214 + 35 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f11c04, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableFrame::ReflowChildren(nsTableFrame * const 0x05f3aca4, nsIPresContext * 
0x03bdd798, nsTableReflowState & {...}, int 1, int 0, unsigned int & 0, nsIFrame 
* & 0x00000000, int * 0x00000000) line 3311 + 53 bytes
nsTableFrame::ReflowTable(nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & 
{...}, const nsHTMLReflowState & {...}, int 1073741824, nsReflowReason 
eReflowReason_Resize, nsIFrame * & 0x00000000, int & 0, int & 1, unsigned int & 
0) line 2207
nsTableFrame::Reflow(nsTableFrame * const 0x05f3aca4, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 2073
nsContainerFrame::ReflowChild(nsIFrame * 0x05f3aca4, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 3, unsigned int & 0) line 802 + 31 bytes
nsTableOuterFrame::OuterReflowChild(nsTableOuterFrame * const 0x05f3ac58, 
nsIPresContext * 0x03bdd798, nsIFrame * 0x05f3aca4, const nsHTMLReflowState & 
{...}, nsHTMLReflowMetrics & {...}, int * 0x00000000, nsSize & {...}, nsMargin & 
{...}, nsMargin & {...}, nsMargin & {...}, nsReflowReason eReflowReason_Initial, 
unsigned int & 0) line 1026 + 47 bytes
nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x05f3ac58, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1611 + 72 bytes
nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState & {...}, nsReflowReason 
eReflowReason_Resize, nsIFrame * 0x05f3ac58, const nsRect & {...}, int 1, 
nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) line 569 
+ 36 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x05f3ac58, const nsRect & {...}, 
int 1, nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) 
line 345 + 50 bytes
nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator 
{...}, int * 0x0012c25c) line 3221 + 59 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, 
int * 0x0012c25c, int 1) line 2471 + 27 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2253 + 31 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x05f2cabc, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 949 + 15 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f2cabc, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableCellFrame::Reflow(nsTableCellFrame * const 0x05f2ca5c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 946
nsContainerFrame::ReflowChild(nsIFrame * 0x05f2ca5c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowFrame::IR_TargetIsChild(nsTableRowFrame * const 0x05f2c99c, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, nsTableFrame & {...}, unsigned int & 0, nsIFrame * 
0x05f2ca5c) line 1299 + 45 bytes
nsTableRowFrame::IncrementalReflow(nsTableRowFrame * const 0x05f2c99c, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, nsTableFrame & {...}, unsigned int & 0) line 1189 + 
46 bytes
nsTableRowFrame::Reflow(nsTableRowFrame * const 0x05f2c99c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1452 + 35 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f2c99c, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 585, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableRowGroupFrame::IR_TargetIsChild(nsTableRowGroupFrame * const 0x05ef79c8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, nsRowGroupReflowState 
& {...}, unsigned int & 0, nsIFrame * 0x05f2c99c) line 1627 + 45 bytes
nsTableRowGroupFrame::IncrementalReflow(nsTableRowGroupFrame * const 0x05ef79c8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, nsRowGroupReflowState 
& {...}, unsigned int & 0) line 1296 + 42 bytes
nsTableRowGroupFrame::Reflow(nsTableRowGroupFrame * const 0x05ef79c8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1205 + 31 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05ef79c8, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 
15, int 15, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
nsTableFrame::IR_TargetIsChild(nsTableFrame * const 0x05f02ce0, nsIPresContext * 
0x03bdd798, nsTableReflowState & {...}, unsigned int & 0, nsIFrame * 0x05ef79c8) 
line 3042 + 50 bytes
nsTableFrame::IncrementalReflow(nsTableFrame * const 0x05f02ce0, nsIPresContext 
* 0x03bdd798, const nsHTMLReflowState & {...}, unsigned int & 0) line 2770 + 38 
bytes
nsTableFrame::Reflow(nsTableFrame * const 0x05f02ce0, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 2023 + 27 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05f02ce0, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 3, unsigned int & 0) line 802 + 31 bytes
nsTableOuterFrame::OuterReflowChild(nsTableOuterFrame * const 0x05f02ac8, 
nsIPresContext * 0x03bdd798, nsIFrame * 0x05f02ce0, const nsHTMLReflowState & 
{...}, nsHTMLReflowMetrics & {...}, int * 0x00000000, nsSize & {...}, nsMargin & 
{...}, nsMargin & {...}, nsMargin & {...}, nsReflowReason 
eReflowReason_Incremental, unsigned int & 0) line 1026 + 47 bytes
nsTableOuterFrame::IR_InnerTableReflow(nsTableOuterFrame * const 0x05f02ac8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1340 + 66 bytes
nsTableOuterFrame::IR_TargetIsInnerTableFrame(nsTableOuterFrame * const 
0x05f02ac8, nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1125 + 31 bytes
nsTableOuterFrame::IR_TargetIsChild(nsTableOuterFrame * const 0x05f02ac8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0, nsIFrame * 0x05f02ce0) line 1097 + 
31 bytes
nsTableOuterFrame::IncrementalReflow(nsTableOuterFrame * const 0x05f02ac8, 
nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & {...}, const 
nsHTMLReflowState & {...}, unsigned int & 0) line 1077 + 42 bytes
nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x05f02ac8, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 1579 + 31 bytes
nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState & {...}, nsReflowReason 
eReflowReason_Incremental, nsIFrame * 0x05f02ac8, const nsRect & {...}, int 0, 
nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) line 569 
+ 36 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x05f02ac8, const nsRect & {...}, 
int 0, nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) 
line 345 + 50 bytes
nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator 
{...}, int * 0x0012de84) line 3221 + 59 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, 
int * 0x0012de84, int 1) line 2471 + 27 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2253 + 31 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x05f02520, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 949 + 15 bytes
nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState & {...}, nsReflowReason 
eReflowReason_Incremental, nsIFrame * 0x05f02520, const nsRect & {...}, int 1, 
nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) line 569 
+ 36 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x05f02520, const nsRect & {...}, 
int 1, nsCollapsingMargin & {...}, int 1, nsMargin & {...}, unsigned int & 0) 
line 345 + 50 bytes
nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator 
{...}, int * 0x0012eaf8) line 3221 + 59 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, 
int * 0x0012eaf8, int 1) line 2471 + 27 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2253 + 31 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x05effbf8, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 949 + 15 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05effbf8, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
CanvasFrame::Reflow(CanvasFrame * const 0x05ef7170, nsIPresContext * 0x03bdd798, 
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) 
line 563
nsBoxToBlockAdaptor::Reflow(nsBoxLayoutState & {...}, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0, int 0, int 0, int 15360, int 9555, int 1) line 882
nsBoxToBlockAdaptor::DoLayout(nsBoxToBlockAdaptor * const 0x05effb5c, 
nsBoxLayoutState & {...}) line 625 + 46 bytes
nsBox::Layout(nsBox * const 0x05effb5c, nsBoxLayoutState & {...}) line 1062
nsScrollBoxFrame::DoLayout(nsScrollBoxFrame * const 0x05ef7640, nsBoxLayoutState 
& {...}) line 394
nsBox::Layout(nsBox * const 0x05ef7640, nsBoxLayoutState & {...}) line 1062
nsContainerBox::LayoutChildAt(nsBoxLayoutState & {...}, nsIBox * 0x05ef7640, 
const nsRect & {...}) line 645 + 16 bytes
nsGfxScrollFrameInner::LayoutBox(nsBoxLayoutState & {...}, nsIBox * 0x05ef7640, 
const nsRect & {...}) line 1081 + 17 bytes
nsGfxScrollFrameInner::Layout(nsBoxLayoutState & {...}) line 1236
nsGfxScrollFrame::DoLayout(nsGfxScrollFrame * const 0x05ef7448, nsBoxLayoutState 
& {...}) line 1089 + 15 bytes
nsBox::Layout(nsBox * const 0x05ef7448, nsBoxLayoutState & {...}) line 1062
nsBoxFrame::Reflow(nsBoxFrame * const 0x05ef7410, nsIPresContext * 0x03bdd798, 
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) 
line 1002
nsGfxScrollFrame::Reflow(nsGfxScrollFrame * const 0x05ef7410, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 776 + 25 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x05ef7410, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, 
int 0, unsigned int 0, unsigned int & 0) line 802 + 31 bytes
ViewportFrame::Reflow(ViewportFrame * const 0x05ef7134, nsIPresContext * 
0x03bdd798, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, 
unsigned int & 0) line 577
IncrementalReflow::Dispatch(nsIPresContext * 0x03bdd798, nsHTMLReflowMetrics & 
{...}, const nsSize & {...}, nsIRenderingContext & {...}) line 942
PresShell::ProcessReflowCommands(int 1) line 6434
ReflowEvent::HandleEvent() line 6291
HandlePLEvent(ReflowEvent * 0x05f8df30) line 6305
PL_HandleEvent(PLEvent * 0x05f8df30) line 596 + 10 bytes
PL_ProcessPendingEvents(PLEventQueue * 0x00fded70) line 526 + 9 bytes
_md_EventReceiverProc(HWND__ * 0x000f013c, unsigned int 49407, unsigned int 0, 
long 16641392) line 1077 + 9 bytes
USER32! 77e01b60()
USER32! 77e01cca()
USER32! 77e083f1()
nsAppShellService::Run(nsAppShellService * const 0x039f90d8) line 458
main1(int 2, char * * 0x00283160, nsISupports * 0x00000000) line 1456 + 32 bytes
main(int 2, char * * 0x00283160) line 1805 + 37 bytes
mainCRTStartup() line 338 + 17 bytes
KERNEL32! 77e7d326()

-> Layout
Assignee: Matti99 → attinasi
Component: Browser-General → Layout
QA Contact: imajes-qa → petersen
worksforme, linux trunk build 20020620
QA Contact: petersen → moied
Using 20020625 trunk build on winXP, Visting URL cause CPU 100% and hang.
Priority: -- → P2
Keywords: mozilla1.1, perf
Attached patch a proposed patch (obsolete) — Splinter Review
I think we can set a limit for break the loop like the debug version. Maybe,
It is not a best patch, but it can avoid hang(release version) and crash(debug
version) really.
Comment on attachment 89910 [details] [diff] [review]
a proposed patch

I'm against this change.  We should figure out what the real problem is.
Target Milestone: --- → Future
dbaron, any idea?
There was a bug karnaze was fixing recently that this might have been a
duplicate of.
Attached patch A new patch (obsolete) — Splinter Review
I want to know why to set the frameReflowStatus to break-before in
nsLineLayout::CanPlaceFrame when return false. I think it is the reason causeed
endless loop.  

  frameReflowStatus=break-before  ----> lineReflowStaus=LINE_REFLOW_REDO
	    ^					       ^
	    |					       |
	     ------------------------------------------

  I think seting the frameReflowStatus to break-before is useless, so I give a
patch to cut the code and the test page present correctly.
Attachment #89910 - Attachment is obsolete: true
Have you looked through the history (cvs ann, or the cvs blame available off of
LXR) to figure out why that line was added?
Keywords: patch, review
Attached patch a proposed patch (obsolete) — Splinter Review
Computing the text width is bigger than availwidth. it cause the function
canplaceframe return false, it return a error demension width, finally caused a
endless loop.
Attachment #92494 - Attachment is obsolete: true
Attached file somewhat simplified testcase (obsolete) —
This is a somewhat simplified testcase of the problem, reduced from
http://www.td.com/hr/it.html .	I can reproduce the problem on Linux as well.
OS: Windows 2000 → All
Hardware: PC → All
Note that in the original URL, http://www.td.com/hr/it.html , the hang symptom
requires a large font size.  In the simplified testcases I just attached, the
hang should be less dependent on having a large font size (i.e., the threshhold
should be lower, and in the second, perhaps even nonexistant).
This is a testcase for regression testing.  We probably don't want to change
the behavior of this testcase without an explicit decision to do so.
Attached patch patch (dbaron)Splinter Review
I believe this patch is the correct fix.

When we have text that must wrap around floaters, and a single word within that
text is too small to fit, our strategy (this is, I think, ambiguous in the CSS
spec) is to push the word to where it does fit (or at a minimum, to clear it
past all floaters if it doesn't fit in its containing block) to reduce the
amount of overlap.  (See attachment 94867 [details] for an example of this behavior.)

We implement this behavior by making |DoReflowInlineFrames| return the REDO
status and make |ReflowInlineFrames| call it again.  Before
|DoReflowInlineFrames| returns, it moves the current vertical position into the
next band in the space manager, i.e., the next top or bottom edge of a float,
which is the next point where the amount of available space (for inlines) might
be different.

However, the beginning of |DoReflowInlineFrames| applies the carried out margin
from the previous block (the collapsed margin) every time it is called.  This
is a bug.  In the normal case, the bug isn't all that serious -- we'll end up
putting the collapsed margin from the bottom of the block between the bottom of
the floater that we need to clear and the beginning of the line.

However, this case is more serious, since the carried out bottom margin is a
*negative* margin.  This puts us into an infinite loop, since we keep applying
this negative margin to push us back into the band in which we didn't fit, and
then we move down to the next band, and the negative margin pushes us back into
the band where we didn't fit.

The solution to this problem is to zero the carried-out bottom margin once we
have modified the current vertical position in order to clear floaters (and we
are thus no longer adjacent to the block).  This is the correct thing to do and
fixes the infinite loop.

(Note that simplification of the testcase helped considerably in finding the
bug.  Trying to simplify the testcase to the smallest possible testcase often
helps to see where the bug is.	That said, this is a bug that requires
considerable knowledge of the CSS spec (collapsing margins, flow around floats)
to understand clearly.)
Attachment #94821 - Attachment is obsolete: true
Taking bug.
Assignee: attinasi → dbaron
Keywords: patch, perf, review
Priority: P2 → P1
Whiteboard: [patch]
Target Milestone: Future → mozilla1.2alpha
This demonstrates the layout correctness bug also fixed by the patch
(attachment 94869 [details] [diff] [review]), which I mentioned in the third of the six long paragraphs
in comment 16.
Attachment #94870 - Attachment mime type: text/plain → text/html
One more point that's good to make:  the reason I put the |Zero|-ing of the
margin within the redo case rather than where we read the margin is that it
isn't until we hit the redo case that we're no longer adjacent to the bottom of
the previous block.  In particular, we can't zero when we read the margin at the
beginning of |DoReflowInlineFrames| because it's possible that the line is
empty, in which case |nsBlockFrame::PlaceLine| would undo the advance by the
amount of the collapsed margin.  This is also where, if the line is not empty,
it will |Zero| the bottom margin.  However, it's outside of the loop in
|ReflowInlineFrames|, so we need this additional call to |Zero|.
Comment on attachment 94869 [details] [diff] [review]
patch (dbaron)

sr=bzbarsky
Attachment #94869 - Flags: superreview+
Comment on attachment 94869 [details] [diff] [review]
patch (dbaron)

makes sense to me

r=roc+moz
Attachment #94869 - Flags: review+
Fix checked in to trunk, 2002-08-14 05:44 PDT.
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Tested it in the nightly build:
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1b) Gecko/20020814
and it appears fixed (page renders, cpu normal).
Too bad so much other stuff broke in that build (tabbed browsing, back 
button)...

Thanks for fixing this one though!
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: