Closed
Bug 1306716
Opened 9 years ago
Closed 9 years ago
[e10s] Crash when tapping a link
Categories
(Firefox for Android Graveyard :: General, defect)
Firefox for Android Graveyard
General
Tracking
(firefox52 fixed)
RESOLVED
FIXED
Firefox 52
Tracking | Status | |
---|---|---|
firefox52 | --- | fixed |
People
(Reporter: snorp, Assigned: snorp)
Details
Attachments
(3 files, 2 obsolete files)
2.06 KB,
patch
|
kats
:
review+
|
Details | Diff | Splinter Review |
5.05 KB,
patch
|
kats
:
review+
|
Details | Diff | Splinter Review |
3.21 KB,
patch
|
kats
:
review+
|
Details | Diff | Splinter Review |
I get the following crash in the parent process when tapping a link with a e10s-enabled GeckoView.
#0 NS_CycleCollectorSuspect3 (aPtr=0x587a6e70, aCp=0x0, aRefCnt=0x587a6e74, aShouldDelete=0x0) at /Volumes/Source/source/gecko-apz/xpcom/base/nsCycleCollector.cpp:3998
#1 0x53bff676 in incr (aCp=0x0, aOwner=0x587a6e70, this=0x587a6e74) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsISupportsImpl.h:190
#2 incr (aOwner=0x587a6e70, this=0x587a6e74) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsISupportsImpl.h:176
#3 nsXULElementTearoff::AddRef (this=0x587a6e70) at /Volumes/Source/source/gecko-apz/dom/xul/nsXULElement.cpp:147
#4 0x53c09fae in nsXULElement::QueryInterface (this=0x594a1290, aIID=..., aInstancePtr=0xbe9ff4c4) at /Volumes/Source/source/gecko-apz/dom/xul/nsXULElement.cpp:349
#5 0x52e1f0a6 in nsCOMPtr_base::assign_from_qi (this=0xbe9ff4d4, aQI=..., aIID=...) at /Volumes/Source/source/gecko-apz/xpcom/glue/nsCOMPtr.cpp:51
#6 0x53b7c4c0 in nsCOMPtr (aQI=..., this=0xbe9ff4d4) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsCOMPtr.h:512
#7 mozilla::dom::TabParent::GetFrameLoader (this=this@entry=0x5a90f400, aUseCachedFrameLoaderAfterDestroy=aUseCachedFrameLoaderAfterDestroy@entry=false) at /Volumes/Source/source/gecko-apz/dom/ipc/TabParent.cpp:2767
#8 0x53b7c676 in mozilla::dom::TabParent::GetChildProcessOffset (this=this@entry=0x5a90f400) at /Volumes/Source/source/gecko-apz/dom/ipc/TabParent.cpp:2141
#9 0x53b7ce0c in mozilla::dom::TabParent::SendHandleTap (this=0x5a90f400, aType=mozilla::layers::GeckoContentController::eSingleTap, aPoint=..., aModifiers=0, aGuid=..., aInputBlockId=1) at /Volumes/Source/source/gecko-apz/dom/ipc/TabParent.cpp:1699
#10 0x533ec3b8 in mozilla::layers::RemoteContentController::HandleTap (this=<optimized out>, aTapType=mozilla::layers::GeckoContentController::eSingleTap, aPoint=..., aModifiers=0, aGuid=..., aInputBlockId=1) at /Volumes/Source/source/gecko-apz/gfx/layers/ipc/RemoteContentController.cpp:84
#11 0x533aff00 in applyImpl<mozilla::layers::GeckoContentController, void (mozilla::layers::GeckoContentController::*)(mozilla::layers::GeckoContentController::TapType, mozilla::gfx::PointTyped<mozilla::LayoutDevicePixel> const&, unsigned short, mozilla::layers::ScrollableLayerGuid const&, unsigned long long), StoreCopyPassByValue<mozilla::layers::GeckoContentController::TapType>, StoreCopyPassByValue<mozilla::gfx::PointTyped<mozilla::LayoutDevicePixel, float> >, StoreCopyPassByValue<unsigned short>, StoreCopyPassByValue<mozilla::layers::ScrollableLayerGuid>, StoreCopyPassByValue<unsigned long long>, 0u, 1u, 2u, 3u, 4u> (args=...,
m=<optimized out>, o=0x580140b0) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsThreadUtils.h:729
#12 apply<mozilla::layers::GeckoContentController, void (mozilla::layers::GeckoContentController::*)(mozilla::layers::GeckoContentController::TapType, mozilla::gfx::PointTyped<mozilla::LayoutDevicePixel> const&, unsigned short, mozilla::layers::ScrollableLayerGuid const&, unsigned long long)> (m=<optimized out>,
o=0x580140b0, this=<optimized out>) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsThreadUtils.h:736
#13 mozilla::detail::RunnableMethodImpl<void (mozilla::layers::GeckoContentController::*)(mozilla::layers::GeckoContentController::TapType, mozilla::gfx::PointTyped<mozilla::LayoutDevicePixel, float> const&, unsigned short, mozilla::layers::ScrollableLayerGuid const&, unsigned long long), true, false, mozilla::layers::GeckoContentController::TapType, mozilla::gfx::PointTyped<mozilla::LayoutDevicePixel, float>, unsigned short, mozilla::layers::ScrollableLayerGuid, unsigned long long>::Run (this=<optimized out>) at /Volumes/Source/source/objdirs/objdir-android-opt/dist/include/nsThreadUtils.h:764
#14 0x53c6eff4 in mozilla::AndroidBridge::RunDelayedUiThreadTasks (this=0x582f01f0) at /Volumes/Source/source/gecko-apz/widget/android/AndroidBridge.cpp:1430
#15 0x4085bc50 in ?? ()
#16 0x4085bc50 in ?? ()
Assignee | ||
Comment 1•9 years ago
|
||
This seems to be caused because we don't have a cycle collector on the UI (APZ controller) thread.
Assignee | ||
Comment 2•9 years ago
|
||
Attachment #8796733 -
Flags: review?(bugmail)
Assignee | ||
Comment 3•9 years ago
|
||
Attachment #8796735 -
Flags: review?(bugmail)
Assignee | ||
Updated•9 years ago
|
Attachment #8796733 -
Attachment is obsolete: true
Attachment #8796733 -
Flags: review?(bugmail)
Updated•9 years ago
|
Attachment #8796735 -
Flags: review?(bugmail) → review+
Pushed by jwillcox@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/53291cfac404
Call TabParent::SendHandleTap from the right thread on Android r=kats
Comment 5•9 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 52
Assignee | ||
Comment 6•9 years ago
|
||
This was still a bit busted because we can't ref TabParent on a non-main thread
Attachment #8797629 -
Flags: review?(bugmail)
Comment 7•9 years ago
|
||
Comment on attachment 8797629 [details] [diff] [review]
Don't retrieve (and ref) the TabParent on a non-main thread
Review of attachment 8797629 [details] [diff] [review]:
-----------------------------------------------------------------
Would like to see a new version with the comments addressed.
::: gfx/layers/ipc/RemoteContentController.cpp
@@ +59,5 @@
>
> // If we get here we're probably in the parent process, but we might be in
> // the GPU process in some shutdown phase where the LayerTreeState or
> // APZCTreeManagerParent structures are torn down. In that case we'll just get
> // a null TabParent.
Drop this comment
@@ +68,1 @@
> MOZ_ASSERT(XRE_IsParentProcess());
Move this MOZ_ASSERT into HandleTap before the |if (NS_IsMainThread)| condition.
@@ +92,1 @@
> }
Move this return out of the |if (apzctmp)| block so that it is hit unconditionally at the end of the |if XRE_GetProcessType| block.
@@ +94,5 @@
> +
> + if (NS_IsMainThread()) {
> + HandleTapOnMainThread(aTapType, aPoint, aModifiers, aGuid, aInputBlockId);
> + } else {
> + // We don't want to get the TabParent or call TabParent::SendHandleTap() from a non-main thread
Add "(this might happen on Android, where this is called on the Java UI thread)" to this comment.
Attachment #8797629 -
Flags: review?(bugmail) → review-
Assignee | ||
Comment 8•9 years ago
|
||
Attachment #8797725 -
Flags: review?(bugmail)
Comment 9•9 years ago
|
||
Comment on attachment 8797725 [details] [diff] [review]
Don't retrieve (and ref) the TabParent on a non-main thread
Review of attachment 8797725 [details] [diff] [review]:
-----------------------------------------------------------------
r+ with comments addressed (sorry I missed these in the previous review).
::: gfx/layers/ipc/RemoteContentController.cpp
@@ +59,5 @@
> + if (tab) {
> + MOZ_ASSERT(NS_IsMainThread());
> +
> + // If we got a TabParent we're definitely in the parent process, and the
> + // message is going to a child process. Also, we're guaranteed to be on the main thread.
Drop this comment as well, and move the assert up to the start of the function.
::: gfx/layers/ipc/RemoteContentController.h
@@ +89,5 @@
> + void HandleTapOnMainThread(TapType aType,
> + const LayoutDevicePoint& aPoint,
> + Modifiers aModifiers,
> + const ScrollableLayerGuid& aGuid,
> + uint64_t aInputBlockId);
nit: alignment
Attachment #8797725 -
Flags: review?(bugmail) → review+
Updated•9 years ago
|
Assignee: nobody → snorp
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Comment 10•9 years ago
|
||
Pushed by jwillcox@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/32c669981d22
Don't retrieve (and ref) the TabParent on a non-main thread r=kats
Comment 12•9 years ago
|
||
Comment on attachment 8797770 [details] [diff] [review]
Follow up to not pass references across threads (!)
Review of attachment 8797770 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/layers/ipc/RemoteContentController.cpp
@@ +54,2 @@
> Modifiers aModifiers,
> + const ScrollableLayerGuid aGuid,
drop the const as well, throughout this patch
Attachment #8797770 -
Flags: review?(bugmail) → review+
Updated•9 years ago
|
Attachment #8797629 -
Attachment is obsolete: true
Comment 13•9 years ago
|
||
bugherder |
Status: REOPENED → RESOLVED
Closed: 9 years ago → 9 years ago
Resolution: --- → FIXED
Comment 14•9 years ago
|
||
Pushed by jwillcox@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/809141755973
Follow up to not pass references across threads (!) r=kats
Comment 15•9 years ago
|
||
bugherder |
Updated•5 years ago
|
Product: Firefox for Android → Firefox for Android Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•