Closed
Bug 113121
Opened 23 years ago
Closed 23 years ago
Crash on closing a tab when lots of tabs open - Trunk [@ nsView::GetChild]
Categories
(Core :: Web Painting, defect)
Tracking
()
VERIFIED
FIXED
mozilla0.9.7
People
(Reporter: fun, Assigned: kmcclusk)
References
Details
(Keywords: crash, stackwanted, topcrash)
Crash Data
Attachments
(1 file)
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:0.9.6+) Gecko/20011130
BuildID: 2001113003
Occasionally, when I have a lot of windows open, this build will crash
on closing a tab.
Sorry that this report is a bit vague. But I've got three Talkbacks,
so considered it was worth a bug report.
Reproducible: Sometimes
Steps to Reproduce:
1. Have a lot of tabs open.
2. Close one.
Actual Results: Dr Watson, and Talkback kicks in.
Expected Results: Close the tab and continue browsing :-)
Talkback IDs:
TB38741942X
TB38742018Q
TB38776188Q
The commment on the first one (TB38741942X) talks about a crash on
loading some Flash. But it was a lots-of-tabs window like the others.
is 30 a lot of tabs.
WFM with 30 tabs
I have
Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.6+) Gecko/20011201
.
Assignee: asa → hyatt
Component: Browser-General → Tabbed Browser
Keywords: crash,
stackwanted
QA Contact: doronr → sairuh
Comment 3•23 years ago
|
||
stack trace is
nsView::GetChild [d:\builds\seamonkey\mozilla\view\src\nsView.cpp, line 851]
nsView::HandleEvent [d:\builds\seamonkey\mozilla\view\src\nsView.cpp, line 361]
nsViewManager::DispatchEvent
[d:\builds\seamonkey\mozilla\view\src\nsViewManager.cpp, line 1887]
HandleEvent [d:\builds\seamonkey\mozilla\view\src\nsView.cpp, line 84]
nsWindow::DispatchEvent
[d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp, line 849]
nsWindow::DispatchWindowEvent
[d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp, line 866]
nsWindow::DispatchKeyEvent
[d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp, line 2531]
nsWindow::OnChar [d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp,
line 2663]
nsWindow::ProcessMessage
[d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp, line 3240]
nsWindow::WindowProc
[d:\builds\seamonkey\mozilla\widget\src\windows\nsWindow.cpp, line 1114]
USER32.dll + 0x124c (0x77e7124c)
0x00110001
-> views (although the actual line number noted doesn't make a lot of sense to
me).
Assignee: hyatt → kmcclusk
Component: Tabbed Browser → Views
QA Contact: sairuh → petersen
Probably caused by Kevin's change to speed up event handling with the
mChildRemoved flag.
Hey, Kevin, is it possible that the following could happen?
1) An event arrives, we set mChildRemoved = PR_FALSE on some view V, we pass the
event to some child
2) The child removes itself (or some other child) from its parent, setting
mChildRemoved = PR_TRUE on V
3) The child also generates a nested event targeted at an ancestor of V
4) Event processing again sets mChildRemoved = PR_FALSE on V, but it now has no
children and does nothing
5) We leave nested event processing and return to outer event processing
6) We test mChildRemoved on V and the result is PR_FALSE, so we try to follow
pKid's nextSibling and die
Dunno if this is the problem here, but it sounds like it COULD happen
Assignee | ||
Comment 5•23 years ago
|
||
The only synchronous event that could be generated while traversing the view
hierarchy is a paint message and that is handled separately from the
nsView::HandleEvent code. In addition, the VM protects against re-entrant
painting requests.
NS_ASSERTION(!(PR_TRUE == mPainting), "recursive painting not permitted");
if (mPainting) {
mRecursiveRefreshPending = PR_TRUE;
return;
}
All other events must be scheduled and later processed when control returns the
toolkit's message pump dispatch.
I think the problem is I was not checking the aHandled flag after the event
dispatch. The old code did not call GetChild until after it had checked the
!aHandled flag. Checking the aHandled flag protects against the case where the
view is cycling through it's children and it is destroyed as a result of
dispatching an event to one of it's children.
old code:
for (PRInt32 cnt = 0; cnt < numkids && !aHandled; cnt++)
{
nsView *pKid = GetChild(cnt);
So this should fix it
if (PointIsInside(*pKid, x, y))
{
...
pKid->HandleEvent(event, 0, aStatus, PR_FALSE, aHandled);
...
}
if (!aHandled) {
if (mChildRemoved) {
// a child has been removed as the result of the HandleEvent
// so pick up at the same relative position in the child list.
// We may end up skipping over a child depending on which child
// or the number of children removed from the list, but this should
// not be an issue since it is unusual to have the views destroyed
// while traversing this list and the only negative effect will be
// that the event is dispatched to a view underneath the intended view.
pKid = GetChild(cnt);
} else {
pKid = pKid->GetNextSibling();
}
}
}
Assignee | ||
Updated•23 years ago
|
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true
Target Milestone: --- → mozilla0.9.7
Assignee | ||
Comment 6•23 years ago
|
||
*** Bug 113193 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 7•23 years ago
|
||
Comment 8•23 years ago
|
||
Comment on attachment 60209 [details] [diff] [review]
Patch - check aHandled after event dispatch before accessing the view's children
sr=attinasi
Attachment #60209 -
Flags: superreview+
Comment on attachment 60209 [details] [diff] [review]
Patch - check aHandled after event dispatch before accessing the view's children
r=roc+moz
Attachment #60209 -
Flags: superreview+ → review+
Assignee | ||
Comment 10•23 years ago
|
||
Fix checked in.
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Comment 11•23 years ago
|
||
Verified Fixed. Adding topcrash keyword and Trunk [@ nsView::GetChild] to
summary. This *was* a topcrasher with recent MozillaTrunk builds...last crash
reported was with build 2001120309.
Status: RESOLVED → VERIFIED
Keywords: topcrash
Summary: Crash on closing a tab when lots of tabs open → Crash on closing a tab when lots of tabs open - Trunk [@ nsView::GetChild]
Updated•14 years ago
|
Crash Signature: [@ nsView::GetChild]
Updated•7 years ago
|
Component: Layout: View Rendering → Layout: Web Painting
You need to log in
before you can comment on or make changes to this bug.
Description
•