Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-97598

[Windows] Deadlock on WebEngineView rendering

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P1: Critical
    • Resolution: Done
    • Affects Version/s: 6.2.0
    • Fix Version/s: 6.2.2, 6.3.0 Alpha
    • Labels:
      None
    • Environment:
      Windows 10, MSVC 2019
    • Platform/s:
      Windows
    • Commits:
      0c0d78a6abf68418ae81c202c5576206bd4e5f47 (qt/qtwebengine/dev) 4813d84003480f2e2c723fc1ae06071d95f9db66 (qt/qtwebengine/6.2)

      Description

      Got a deadlock when actively resized app window during WebEngineView rendering (WebRtc conf).

      GUI tread:

       	[External Code]	
      >	[Inline Frame] Qt6Core.dll!QWaitConditionPrivate::wait(QWaitConditionEvent *) Line 111	C++
       	Qt6Core.dll!QWaitCondition::wait(QMutex * mutex, unsigned long time) Line 169	C++
       	Qt6Core.dll!QWaitCondition::wait(QMutex * mutex, QDeadlineTimer deadline) Line 180	C++
       	Qt6Quick.dll!QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window * w, bool inExpose) Line 1570	C++
       	Qt6Quick.dll!QSGThreadedRenderLoop::handleExposure(QQuickWindow * window) Line 1327	C++
       	Qt6Gui.dll!QWindow::event(QEvent * ev) Line 2468	C++
       	Qt6Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3403	C++
       	Qt6Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3355	C++
       	Qt6Core.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1063	C++
       	Qt6Gui.dll!QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent * e) Line 3169	C++
       	Qt6Gui.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 1172	C++
       	Qt6Core.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned __int64 wp, __int64 lp) Line 248	C++
       	[External Code]	
       	qwindows.dll!qWindowsWndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 1711	C++
       	[External Code]	
       	qwindows.dll!qWindowsWndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 1711	C++
       	[External Code]	
       	Qt6Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 543	C++
       	Qt6Gui.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 73	C++
       	[Inline Frame] Qt6Core.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag>) Line 139	C++
       	Qt6Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 232	C++
       	Qt6Core.dll!QCoreApplication::exec() Line 1378	C++
      

      Some worker render thread:

       	[External Code]	
      >	[Inline Frame] Qt6Core.dll!QtWindowsFutex::futexWait(QBasicAtomicPointer<QMutexPrivate> & expectedValue, QMutexPrivate *) Line 180	C++
       	Qt6Core.dll!QBasicMutex::lockInternal() Line 592	C++
       	[Inline Frame] Qt6WebEngineCore.dll!QMutexLocker<QMutex>::{ctor}(QMutex * mutex) Line 245	C++
       	Qt6WebEngineCore.dll!QtWebEngineCore::DisplaySoftwareOutputSurface::Device::swapFrame() Line 124	C++
       	Qt6WebEngineQuick.dll!QtWebEngineCore::RenderWidgetHostViewQtDelegateQuick::updatePaintNode(QSGNode * oldNode, QQuickItem::UpdatePaintNodeData * __formal) Line 335	C++
       	Qt6Quick.dll!QQuickWindowPrivate::updateDirtyNode(QQuickItem * item) Line 2089	C++
       	Qt6Quick.dll!QQuickWindowPrivate::updateDirtyNodes() Line 1834	C++
       	Qt6Quick.dll!QQuickWindowPrivate::syncSceneGraph() Line 570	C++
       	Qt6Quick.dll!QSGRenderThread::sync(bool inExpose) Line 602	C++
       	Qt6Quick.dll!QSGRenderThread::syncAndRender() Line 741	C++
       	Qt6Quick.dll!QSGRenderThread::run() Line 990	C++
       	Qt6Core.dll!QThreadPrivate::start(void * arg) Line 334	C++
       	[External Code]	
      

      VizCompositorThread:

       	[External Code]	
      >	[Inline Frame] Qt6Core.dll!QtWindowsFutex::futexWait(QBasicAtomicPointer<QMutexPrivate> & expectedValue, QMutexPrivate *) Line 180	C++
       	Qt6Core.dll!QBasicMutex::lockInternal() Line 592	C++
       	[Inline Frame] Qt6WebEngineCore.dll!QtWebEngineCore::Compositor::BindingMap::lock() Line 83	C++
       	Qt6WebEngineCore.dll!QtWebEngineCore::Compositor::observer() Line 169	C++
       	Qt6WebEngineCore.dll!QtWebEngineCore::DisplaySoftwareOutputSurface::Device::OnSwapBuffers(base::OnceCallback<void __cdecl(gfx::Size const &)> swap_ack_callback) Line 105	C++
       	Qt6WebEngineCore.dll!viz::SoftwareOutputSurface::SwapBuffers(viz::OutputSurfaceFrame frame) Line 73	C++
       	Qt6WebEngineCore.dll!viz::SoftwareRenderer::SwapBuffers(viz::DirectRenderer::SwapFrameData swap_frame_data) Line 121	C++
       	Qt6WebEngineCore.dll!viz::Display::DrawAndSwap(base::TimeTicks expected_display_time) Line 850	C++
       	[Inline Frame] Qt6WebEngineCore.dll!viz::DisplayScheduler::DrawAndSwap() Line 134	C++
       	Qt6WebEngineCore.dll!viz::DisplayScheduler::AttemptDrawAndSwap() Line 358	C++
       	Qt6WebEngineCore.dll!viz::DisplayScheduler::OnBeginFrameDeadline() Line 375	C++
       	[Inline Frame] Qt6WebEngineCore.dll!base::OnceCallback<void __cdecl(void)>::Run() Line 101	C++
       	Qt6WebEngineCore.dll!base::internal::CancelableCallbackImpl<base::OnceCallback<void __cdecl(void)>>::ForwardOnce<>() Line 128	C++
       	[Inline Frame] Qt6WebEngineCore.dll!base::internal::FunctorTraits<void (__cdecl printing::PrintJobWorker::*)(void),void>::Invoke(void(printing::PrintJobWorker::*)()) Line 498	C++
       	[Inline Frame] Qt6WebEngineCore.dll!base::internal::InvokeHelper<1,void>::MakeItSo(void(printing::PrintJobWorker::*)() &&) Line 657	C++
       	[Inline Frame] Qt6WebEngineCore.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl printing::PrintJobWorker::*)(void),base::WeakPtr<printing::PrintJobWorker>>,void __cdecl(void)>::RunImpl(void(printing::PrintJobWorker::*)() &&) Line 710	C++
       	Qt6WebEngineCore.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl printing::PrintJobWorker::*)(void),base::WeakPtr<printing::PrintJobWorker>>,void __cdecl(void)>::RunOnce(base::internal::BindStateBase * base) Line 683	C++
       	[Inline Frame] Qt6WebEngineCore.dll!base::OnceCallback<void __cdecl(void)>::Run() Line 101	C++
       	Qt6WebEngineCore.dll!base::TaskAnnotator::RunTask(const char * trace_event_name, base::PendingTask * pending_task) Line 163	C++
       	Qt6WebEngineCore.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::LazyNow * continuation_lazy_now) Line 352	C++
       	Qt6WebEngineCore.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() Line 266	C++
       	Qt6WebEngineCore.dll!base::MessagePumpDefault::Run(base::MessagePump::Delegate * delegate) Line 40	C++
       	Qt6WebEngineCore.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool application_tasks_allowed, base::TimeDelta timeout) Line 463	C++
       	Qt6WebEngineCore.dll!base::RunLoop::Run(const base::Location & location) Line 135	C++
       	Qt6WebEngineCore.dll!base::Thread::Run(base::RunLoop * run_loop) Line 312	C++
       	Qt6WebEngineCore.dll!base::Thread::ThreadMain() Line 385	C++
       	Qt6WebEngineCore.dll!base::`anonymous namespace'::ThreadFunc(void * params) Line 114	C++
       	[External Code]	
      

      Hope this info will be enough, I don't think I will be able to create some minimal example for reproduction.

        Attachments

          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              Assignee:
              kiburtse Kirill Burtsev
              Reporter:
              studiosus Vladimir Belyavsky
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Gerrit Reviews

                  There are no open Gerrit changes