Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
6.2.0
-
None
-
Windows 10, MSVC 2019
-
-
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
- relates to
-
QTBUG-102459 Deadlock on WebEngineView destruction
- Closed
For Gerrit Dashboard: QTBUG-97598 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
377442,4 | Fix rendering deadlock for software compositing | dev | qt/qtwebengine | Status: MERGED | +2 | 0 |
377633,2 | Fix rendering deadlock for software compositing | 6.2 | qt/qtwebengine | Status: MERGED | +2 | 0 |