WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
13938
REGRESSION: Difficult to repro crash in RenderBlock::layoutBlock using iGoogle
https://bugs.webkit.org/show_bug.cgi?id=13938
Summary
REGRESSION: Difficult to repro crash in RenderBlock::layoutBlock using iGoogle
Beth Dakin
Reported
2007-05-30 12:45:56 PDT
We have had several reports of people crashing loading/playing with the new iGoogle Google homepage. Here is what we have learned about the crash so far: 1. It was introduced with
http://trac.webkit.org/projects/webkit/changeset/21183
2. Antti caught this in the debugger once, and discovered that the problem is that we are triggering layout() from SelectionController()::caretRect() and end up over-popping layout state. He crashed in RenderView::layout() at ASSERT(!m_layoutState); Here is the relevant part of his debug stack trace: #0 0x0114587a in WebCore::RenderView::layout at RenderView.cpp:104 #1 0x010c4d6f in WebCore::FrameView::layout at FrameView.cpp:418 #2 0x010c7aad in WebCore::Document::updateLayout at Document.cpp:1054 #3 0x010c7a2b in WebCore::Document::updateLayout at Document.cpp:1046 #4 0x010d2efc in WebCore::Document::updateLayoutIgnorePendingStylesheets at Document.cpp:1080 #5 0x011e998b in WebCore::VisiblePosition::canonicalPosition at VisiblePosition.cpp:130 #6 0x011e9d4c in WebCore::VisiblePosition::init at VisiblePosition.cpp:58 #7 0x011e9f48 in WebCore::VisiblePosition::VisiblePosition at VisiblePosition.cpp:45 #8 0x011d9e54 in WebCore::SelectionController::layout at SelectionController.cpp:839 #9 0x011da04f in WebCore::SelectionController::caretRect at SelectionController.cpp:856 #10 0x011da360 in WebCore::SelectionController::recomputeCaretRect at SelectionController.cpp:896 #11 0x010b7475 in WebCore::Frame::selectionLayoutChanged at Frame.cpp:585 #12 0x010b7616 in WebCore::Frame::invalidateSelection at Frame.cpp:522 #13 0x010c4db7 in WebCore::FrameView::layout at FrameView.cpp:423 #14 0x0127518c in WebCore::RenderPart::updateWidgetPosition at RenderPart.cpp:115 #15 0x01146723 in WebCore::RenderView::updateWidgetPositions at RenderView.cpp:447 #16 0x0115c510 in WebCore::RenderLayer::scrollToOffset at RenderLayer.cpp:671 #17 0x0115e2dc in WebCore::RenderLayer::updateScrollInfoAfterLayout at RenderLayer.cpp:1170 #18 0x0113a89e in WebCore::RenderBlock::layoutBlock at RenderBlock.cpp:647 And here is the full stack trace that we have: Thread 0 Crashed (i386):
>#0 com.apple.WebCore 0x9556eab8 WebCore::RenderBlock::layoutBlock(bool) + 2360
#1 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #2 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #3 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #4 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #5 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #6 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #7 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #8 com.apple.WebCore 0x9555d3fb WebCore::RenderBlock::layoutInlineChildren(bool, int&, int&) + 2235 #9 com.apple.WebCore 0x9556e453 WebCore::RenderBlock::layoutBlock(bool) + 723 #10 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #11 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #12 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #13 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #14 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #15 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #16 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #17 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #18 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #19 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #20 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #21 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #22 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #23 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #24 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #25 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #26 com.apple.WebCore 0x9556dc4e WebCore::RenderBlock::layoutBlockChildren(bool) + 814 #27 com.apple.WebCore 0x9556e892 WebCore::RenderBlock::layoutBlock(bool) + 1810 #28 com.apple.WebCore 0x955618c8 WebCore::RenderBlock::layout() + 40 #29 com.apple.WebCore 0x95579c48 WebCore::RenderView::layout() + 200 #30 com.apple.WebCore 0x954f25c6 WebCore::FrameView::layout(bool) + 422 #31 com.apple.WebCore 0x95851a62 WebCore::Timer<WebCore::FrameView>::fired() + 82 #32 com.apple.WebCore 0x95617e19 WebCore::TimerBase::fireTimers(double, WTF::Vector<WebCore::TimerBase*, 0ul> const&) + 137 #33 com.apple.WebCore 0x95617ed2 WebCore::TimerBase::sharedTimerFired() + 162 #34 com.apple.CoreFoundation 0x95ab1414 __CFRunLoopRun + 4180 #35 com.apple.CoreFoundation 0x95ab17b9 CFRunLoopRunSpecific + 553 #36 com.apple.CoreFoundation 0x95ab1848 CFRunLoopRunInMode + 88 #37 com.apple.HIToolbox 0x90628055 RunCurrentEventLoopInMode + 305 #38 com.apple.HIToolbox 0x9062da61 ReceiveNextEventCommon + 374 #39 com.apple.HIToolbox 0x9062db6d BlockUntilNextEventMatchingListInMode + 106 #40 com.apple.AppKit 0x932de79f _DPSNextEvent + 657 #41 com.apple.AppKit 0x932de0f2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 #42 com.apple.Safari 0x00006fde #43 com.apple.AppKit 0x932d8121 -[NSApplication run] + 795 #44 com.apple.AppKit 0x932cb480 NSApplicationMain + 663 #45 com.apple.Safari 0x00002e4f #46 com.apple.Safari 0x0004c159 #47 page zero 0x00000002
Attachments
Add attachment
proposed patch, testcase, etc.
Beth Dakin
Comment 1
2007-05-30 12:46:37 PDT
<
rdar://problem/5198882
> CrashTracer: [USER] 7 crashes in Safari at com.apple.WebCore: WebCore::RenderBlock::layoutBlock + 2360
mitz
Comment 2
2007-05-30 13:04:15 PDT
Looks like a regression from <
http://trac.webkit.org/projects/webkit/changeset/20936
> which was a fix for
bug 13375
. Document::updateLayout() was changed to update the parent frame's layout. In the case of this bug, the parent frame is already in the middle of layout, so you get a nasty cycle (which is at least detected by the LayoutState assertion).
mitz
Comment 3
2007-05-31 10:01:22 PDT
So this bug turned out to be fixed already, but Beth added the midLayout guard around invalidateSelection() is <
http://trac.webkit.org/projects/webkit/changeset/21905
> and just now going to maps.google.com I hit the ASSERT(!d->midLayout), with this backtrace: 0 com.apple.WebCore 0x01101a68 WebCore::FrameView::layout(bool) + 100 (FrameView.cpp:290) 1 com.apple.WebCore 0x01106110 WebCore::Document::updateLayout() + 260 (Document.cpp:1060) 2 com.apple.WebCore 0x0111576c WebCore::Document::updateLayoutIgnorePendingStylesheets() + 200 (Document.cpp:1087) 3 com.apple.WebCore 0x012851b4 WebCore::VisiblePosition::canonicalPosition(WebCore::Position const&) + 104 (VisiblePosition.cpp:143) 4 com.apple.WebCore 0x01285730 WebCore::VisiblePosition::init(WebCore::Position const&, WebCore::EAffinity) + 68 (VisiblePosition.cpp:58) 5 com.apple.WebCore 0x012859a0 WebCore::VisiblePosition::VisiblePosition[in-charge](WebCore::Position const&, WebCore::EAffinity) + 60 (VisiblePosition .cpp:46) 6 com.apple.WebCore 0x0127173c WebCore::SelectionController::layout() + 648 (SelectionController.cpp:839) 7 com.apple.WebCore 0x01271960 WebCore::SelectionController::caretRect() const + 56 (SelectionController.cpp:858) 8 com.apple.WebCore 0x01271d84 WebCore::SelectionController::recomputeCaretRect() + 276 (SelectionController.cpp:896) 9 com.apple.WebCore 0x010eff04 WebCore::Frame::selectionLayoutChanged() + 52 (Frame.cpp:584) 10 com.apple.WebCore 0x010f01a8 WebCore::Frame::invalidateSelection() + 56 (Frame.cpp:523) 11 com.apple.WebCore 0x011023e8 WebCore::FrameView::layout(bool) + 2532 (FrameView.cpp:433) The FrameView being the same in frames #0 and #11. Also regarding the original problem (at iGoogle), if this is something that can legitimately happen within WebCore, isn't an ASSERT too harsh? I mean, does the iGoogle bug still need to be fixed some other way?
David Kilzer (:ddkilzer)
Comment 4
2007-06-04 09:36:51 PDT
Saw the same ASSERT(!d->midLayout) after accidentally hitting the "Yahoo" link in the Safari toolbar, then using Cmd-Left-Arrow to go back while the Yahoo main page (www.yahoo.com) was still loading. Oddly, Safari hung in such a way so that I couldn't attach via gdb or get a stack trace through CrashReporter.
David Kilzer (:ddkilzer)
Comment 5
2007-06-04 17:28:04 PDT
With a local debug build of WebKit
r21908
, I hit this EVERY time I go to
http://maps.google.com/
now. It's really not that hard to reproduce now. :(
David Kilzer (:ddkilzer)
Comment 6
2007-06-04 17:30:44 PDT
This needs a new Radar to track; the one listed in
Comment #1
has been closed.
Dave Hyatt
Comment 7
2007-06-04 18:01:50 PDT
It's just an assert.
David Kilzer (:ddkilzer)
Comment 8
2007-06-04 18:08:04 PDT
(In reply to
comment #6
)
> This needs a new Radar to track; the one listed in
Comment #1
has been closed.
It's kind of hard to use Google Maps when it crashes all the time in a debug build, too! :)
David Kilzer (:ddkilzer)
Comment 9
2007-06-06 07:48:09 PDT
(In reply to
comment #7
)
> It's just an assert.
The assert was removed in
r22022
.
http://trac.webkit.org/projects/webkit/changeset/22022
Is this bug fixed now?
mitz
Comment 10
2007-06-14 15:52:58 PDT
(In reply to
comment #9
)
> Is this bug fixed now?
Yes. It was actually fixed before it was filed.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug