Closed Bug 1211506 Opened 9 years ago Closed 9 years ago

Freeze when scrolling the page

Categories

(Core :: Panning and Zooming, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla44
Tracking Status
firefox44 --- fixed

People

(Reporter: bbouvier, Assigned: botond)

References

Details

Attachments

(2 files)

So I don't really have STR, I was just using Firefox Nightly (latest ones) and it froze at some point. I attached a gdb to it to see what was going on, and saw the following stack traces, which indicate a deadlock: Firefox: #0 __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135 #1 0x00007f628af1768d in _L_lock_1082 () from /lib/x86_64-linux-gnu/libpthread.so.0 #2 0x00007f628af17607 in __GI___pthread_mutex_lock (mutex=0x7f625d561ec0) at ../nptl/pthread_mutex_lock.c:134 #3 0x00007f62897e9181 in PR_Lock () from /home/ben/.files/private/bin/firefox/libnspr4.so #4 0x00007f627d7a96bb in mozilla::layers::APZCTreeManager::GetScreenToApzcTransform(mozilla::layers::AsyncPanZoomController const*) const () from /home/ben/.files/private/bin/firefox/libxul.so #5 0x00007f627d7ad0ac in mozilla::layers::TransformDisplacement(mozilla::layers::APZCTreeManager*, mozilla::layers::AsyncPanZoomController*, mozilla::layers::AsyncPanZoomController*, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&) () from /home/ben/.files/private/bin/firefox/libxul.so #6 0x00007f627d7b437f in mozilla::layers::APZCTreeManager::DispatchScroll(mozilla::layers::AsyncPanZoomController*, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::layers::OverscrollHandoffState&) () from /home/ben/.files/private/bin/firefox/libxul.so #7 0x00007f627d7b4285 in mozilla::layers::AsyncPanZoomController::AttemptScroll(mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::gfx::Poin---Type <return> to continue, or q <return> to quit--- tTyped<mozilla::ParentLayerPixel, float>&, mozilla::layers::OverscrollHandoffState&) () from /home/ben/.files/private/bin/firefox/libxul.so #8 0x00007f627d7b4346 in mozilla::layers::APZCTreeManager::DispatchScroll(mozilla::layers::AsyncPanZoomController*, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::gfx::PointTyped<mozilla::ParentLayerPixel, float>&, mozilla::layers::OverscrollHandoffState&) () from /home/ben/.files/private/bin/firefox/libxul.so #9 0x00007f627d7b488c in mozilla::layers::AsyncPanZoomController::OnScrollWheel(mozilla::ScrollWheelInput const&) () from /home/ben/.files/private/bin/firefox/libxul.so #10 0x00007f627d7bda0b in mozilla::layers::AsyncPanZoomController::HandleInputEvent(mozilla::InputData const&, mozilla::gfx::Matrix4x4 const&) () from /home/ben/.files/private/bin/firefox/libxul.so #11 0x00007f627d7bd41b in mozilla::layers::InputQueue::MaybeHandleCurrentBlock(mozilla::layers::CancelableBlockState*, mozilla::InputData const&) () from /home/ben/.files/private/bin/firefox/libxul.so #12 0x00007f627d7be098 in mozilla::layers::InputQueue::ReceiveScrollWheelInput(nsRefPtr<mozilla::layers::AsyncPanZoomController> const&, bool, mozilla::ScrollWheelInput const&, unsigned long*) () from /home/ben/.files/private/bin/firefox/libxul.so #13 0x00007f627d7be119 in mozilla::layers::InputQueue::ReceiveInputEvent(nsRefPtr<mozilla::layers::AsyncPanZoomController> const&, bool, mozilla::InputData const&, unsigned long*) () from /home/ben/.files/private/bin/firefox/libxul.so ---Type <return> to continue, or q <return> to quit--- #14 0x00007f627d7be53f in mozilla::layers::APZCTreeManager::ReceiveInputEvent(mozilla::InputData&, mozilla::layers::ScrollableLayerGuid*, unsigned long*) () from /home/ben/.files/private/bin/firefox/libxul.so #15 0x00007f627d7bea9c in mozilla::layers::APZCTreeManager::ProcessWheelEvent(mozilla::WidgetWheelEvent&, mozilla::layers::ScrollableLayerGuid*, unsigned long*) () from /home/ben/.files/private/bin/firefox/libxul.so #16 0x00007f627d7c01d0 in mozilla::layers::APZCTreeManager::ReceiveInputEvent(mozilla::WidgetInputEvent&, mozilla::layers::ScrollableLayerGuid*, unsigned long*) () from /home/ben/.files/private/bin/firefox/libxul.so #17 0x00007f627e3faf35 in nsBaseWidget::DispatchAPZAwareEvent(mozilla::WidgetInputEvent*) () from /home/ben/.files/private/bin/firefox/libxul.so #18 0x00007f627e426f64 in nsWindow::OnScrollEvent(_GdkEventScroll*) () from /home/ben/.files/private/bin/firefox/libxul.so #19 0x00007f627e426f9e in scroll_event_cb(_GtkWidget*, _GdkEventScroll*) () from /home/ben/.files/private/bin/firefox/libxul.so #20 0x00007f6287d8cd6e in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 #21 0x00007f62856145e7 in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #22 0x00007f628562d088 in g_signal_emit_valist () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #23 0x00007f628562dce2 in g_signal_emit () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 #24 0x00007f6287eb5c64 in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 ---Type <return> to continue, or q <return> to quit--- #25 0x00007f6287d8b0bc in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 #26 0x00007f6287d8c94a in gtk_main_do_event () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 #27 0x00007f6287990c32 in ?? () from /usr/lib/x86_64-linux-gnu/libgdk-3.so.0 #28 0x00007f6285344e04 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #29 0x00007f6285345048 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #30 0x00007f62853450ec in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #31 0x00007f627ceec11f in nsAppShell::ProcessNextNativeEvent(bool) () from /home/ben/.files/private/bin/firefox/libxul.so #32 0x00007f627ceeb224 in nsBaseAppShell::OnProcessNextEvent(nsIThreadInternal*, bool) () from /home/ben/.files/private/bin/firefox/libxul.so #33 0x00007f627ce2d838 in nsThread::ProcessNextEvent(bool, bool*) () from /home/ben/.files/private/bin/firefox/libxul.so #34 0x00007f627ce3679e in NS_ProcessNextEvent(nsIThread*, bool) () from /home/ben/.files/private/bin/firefox/libxul.so #35 0x00007f627ce4e833 in mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) () from /home/ben/.files/private/bin/firefox/libxul.so #36 0x00007f627d3b8a13 in MessageLoop::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #37 0x00007f627e40c168 in nsBaseAppShell::Run() () from /home/ben/.files/private/bin/firefox/libxul.so ---Type <return> to continue, or q <return> to quit--- #38 0x00007f627e9cafec in nsAppStartup::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #39 0x00007f627ea019d9 in XREMain::XRE_mainRun() () from /home/ben/.files/private/bin/firefox/libxul.so #40 0x00007f627ea04028 in XREMain::XRE_main(int, char**, nsXREAppData const*) () from /home/ben/.files/private/bin/firefox/libxul.so #41 0x00007f627ea042b8 in XRE_main () from /home/ben/.files/private/bin/firefox/libxul.so #42 0x0000000000413836 in do_main(int, char**, nsIFile*) () #43 0x000000000040597e in main () plugin-container: #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185 #1 0x00007f2909d40519 in PR_WaitCondVar () from /home/ben/.files/private/bin/firefox/libnspr4.so #2 0x00007f2905833735 in mozilla::CondVar::Wait(unsigned int) [clone .isra.7] () from /home/ben/.files/private/bin/firefox/libxul.so #3 0x00007f2905dd6aca in mozilla::ipc::MessageChannel::WaitForSyncNotify() () from /home/ben/.files/private/bin/firefox/libxul.so #4 0x00007f2905ddddc4 in mozilla::ipc::MessageChannel::Send(IPC::Message*, IPC::Message*) () from /home/ben/.files/private/bin/firefox/libxul.so #5 0x00007f2905e5eee0 in mozilla::layers::PLayerTransactionChild::SendUpdate(nsTArray<mozilla::layers::Edit> const&, unsigned long const&, mozilla::layers::TargetConfig const&, nsTArray<mozilla::layers::PluginWindowData> const&, bool const&, bool const&, unsigned int const&, bool const&, mozilla::TimeStamp const&, int const&, nsTArray<mozilla::layers::EditReply>*) () from /home/ben/.files/private/bin/firefox/libxul.so #6 0x00007f2906208eae in mozilla::layers::ShadowLayerForwarder::EndTransaction(nsTArray<mozilla::layers::EditReply>*, nsIntRegion const&, unsigned long, bool, unsigned int, bool, mozilla::TimeStamp const&, bool*) () from /home/ben/.files/private/bin/firefox/libxul.so #7 0x00007f29061e45e6 in mozilla::layers::ClientLayerManager::ForwardTransaction(bool) () from /home/ben/.files/private/bin/firefox/libxul.so #8 0x00007f29061e4841 in mozilla::layers::ClientLayerManager::EndTransaction(void (*)(mozilla::layers::PaintedLayer*, gfxContext*, nsIntRegion const&, nsIntRegion const&, mozilla::layers::DrawRegionClip, nsIntRegion const&, void*), void*, mozilla::layers::LayerManager::EndTransactionFlags) () from /home/ben/.files/private/bin/firefox/libxul.so #9 0x00007f2906f82156 in nsDisplayList::PaintRoot(nsDisplayListBuilder*, nsRenderingContext*, unsigned int) () from /home/ben/.files/private/bin/firefox/libxul.so #10 0x00007f2906fbba73 in nsLayoutUtils::PaintFrame(nsRenderingContext*, nsIFrame*, nsRegion const&, unsigned int, unsigned int) () from /home/ben/.files/private/bin/firefox/libxul.so #11 0x00007f2906fbc4c6 in PresShell::Paint(nsView*, nsRegion const&, unsigned int) () from /home/ben/.files/private/bin/firefox/libxul.so #12 0x00007f2906dffe91 in nsViewManager::ProcessPendingUpdatesPaint(nsIWidget*) () from /home/ben/.files/private/bin/firefox/libxul.so #13 0x00007f2906e000dc in nsViewManager::ProcessPendingUpdatesForView(nsView*, bool) () from /home/ben/.files/private/bin/firefox/libxul.so #14 0x00007f290592f24e in nsRefreshDriver::Tick(long, mozilla::TimeStamp) () from /home/ben/.files/private/bin/firefox/libxul.so #15 0x00007f2906f4a413 in mozilla::RefreshDriverTimer::Tick(long, mozilla::TimeStamp) () from /home/ben/.files/private/bin/firefox/libxul.so #16 0x00007f2906f4a52e in mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::TickRefreshDriver(mozilla::TimeStamp) () from /home/ben/.files/private/bin/firefox/libxul.so #17 0x00007f2906f4a66a in mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::NotifyVsync(mozilla::TimeStamp) () from /home/ben/.files/private/bin/firefox/libxul.so #18 0x00007f29070cbe7f in mozilla::layout::VsyncChild::RecvNotify(mozilla::TimeStamp const&) () from /home/ben/.files/private/bin/firefox/libxul.so #19 0x00007f2905ee286f in mozilla::layout::PVsyncChild::OnMessageReceived(IPC::Message const&) () from /home/ben/.files/private/bin/firefox/libxul.so #20 0x00007f2905e042e3 in mozilla::ipc::PBackgroundChild::OnMessageReceived(IPC::Message const&) () from /home/ben/.files/private/bin/firefox/libxul.so #21 0x00007f2905855691 in mozilla::ipc::MessageChannel::DispatchAsyncMessage(IPC::Message const&) () from /home/ben/.files/private/bin/firefox/libxul.so #22 0x00007f290585613c in mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message const&) () from /home/ben/.files/private/bin/firefox/libxul.so #23 0x00007f2905856ce5 in mozilla::ipc::MessageChannel::OnMaybeDequeueOne() () from /home/ben/.files/private/bin/firefox/libxul.so #24 0x00007f2905853fae in MessageLoop::DoWork() () from /home/ben/.files/private/bin/firefox/libxul.so #25 0x00007f2905dd5680 in mozilla::ipc::DoWorkRunnable::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #26 0x00007f2905834b82 in nsThread::ProcessNextEvent(bool, bool*) () from /home/ben/.files/private/bin/firefox/libxul.so #27 0x00007f290583d79e in NS_ProcessNextEvent(nsIThread*, bool) () from /home/ben/.files/private/bin/firefox/libxul.so #28 0x00007f29058558af in mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) () from /home/ben/.files/private/bin/firefox/libxul.so #29 0x00007f2905dbfa13 in MessageLoop::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #30 0x00007f2906e13168 in nsBaseAppShell::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #31 0x00007f290740b7a2 in XRE_RunAppShell () from /home/ben/.files/private/bin/firefox/libxul.so #32 0x00007f2905dbfa13 in MessageLoop::Run() () from /home/ben/.files/private/bin/firefox/libxul.so #33 0x00007f290740be77 in XRE_InitChildProcess () from /home/ben/.files/private/bin/firefox/libxul.so #34 0x0000000000416be1 in content_process_main(int, char**) () #35 0x00007f2903eb0ec5 in __libc_start_main (main=0x408c20 <main>, argc=10, argv=0x7fff233dc738, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff233dc728) at libc-start.c:287 #36 0x0000000000416445 in _start () Here's some info about my graphics setup from about:support that might be relevant (also, I'm using e10s): Graphics Adapter Description NVIDIA Corporation -- GeForce GT 750M/PCIe/SSE2 Asynchronous Pan/Zoom wheel input enabled Device ID GeForce GT 750M/PCIe/SSE2 Driver Version 4.5.0 NVIDIA 346.96 GPU Accelerated Windows 0/1 Basic (OMTC) Supports Hardware H264 Decoding No; Vendor ID NVIDIA Corporation WebGL Renderer NVIDIA Corporation -- GeForce GT 750M/PCIe/SSE2 windowLayerManagerRemote true AzureCanvasBackend cairo AzureContentBackend cairo AzureFallbackCanvasBackend none AzureSkiaAccelerated 0 CairoUseXRender 1 (#0) Error Invalid draw target type specified: 0 (#3) Error Failed GetAsDrawTarget true, 0x7f2c431cd000 + 16, Size(160,90), 640, 1 (#4) Error Invalid draw target type specified: 0 (#5) Error Failed GetAsDrawTarget true, 0x7f2c42e25000 + 16, Size(160,90), 640, 1 (#6) Error Invalid draw target type specified: 0 (#7) Error Failed GetAsDrawTarget true, 0x7f2c436ee000 + 16, Size(160,90), 640, 1
If you hit this again, can you also print a stack trace from the Compositor thread in the parent process? That's the thread that the content process main thread is blocking on here.
Attached file debug (deleted) —
Happened again today, see attached debug log (contains main process main thread bt, plus compositor thread on the main process, and plugin-container).
Flags: needinfo?(mstange)
Perfect, thanks!
Component: Graphics: Layers → Panning and Zooming
Flags: needinfo?(mstange)
This is a deadlock caused by a violation of APZ lock ordering [1]: OnScrollWheel() is calling CallDispatchScroll(), which might need to acquire the tree lock, while holding the APZC lock. Looks like a regression from bug 1152011. [1] https://dxr.mozilla.org/mozilla-central/rev/607a236c229994df99766c005f9ec729532d7747/gfx/layers/apz/src/APZCTreeManager.h#57
Bug 1211506 - Respect the APZ lock ordering in AsyncPanZoomController::OnScrollWheel(). r=mstange
Attachment #8675122 - Flags: review?(mstange)
Assignee: nobody → botond
Comment on attachment 8675122 [details] MozReview Request: Bug 1211506 - Respect the APZ lock ordering in AsyncPanZoomController::OnScrollWheel(). r=mstange https://reviewboard.mozilla.org/r/22331/#review19947
Attachment #8675122 - Flags: review?(mstange) → review+
Adjusted comment and landed.
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla44
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: