https://bugs.kde.org/show_bug.cgi?id=524843

findhhq <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #2 from findhhq <[email protected]> ---
I can reproduce this deterministically on the *stable* release (not only git
master).

STEPS TO REPRODUCE
1. System Settings → Fonts → set the General font to "Noto Sans 12pt" or larger
(11pt and below work fine).
2. Launch plasma-discover (default view, i.e. the Explore page).
3. Within 15–20 seconds the window freezes; the main thread is pinned at 100%
CPU. It never recovers.

ADDITIONAL OBSERVATIONS
- Reproduces on every launch, not only on resize. Possibly the same root cause
as bug 521665 (freeze reported there on resize with a Chinese locale; my system
is also zh_CN.UTF-8).
- Independent of pending updates: I had zero pending updates when it froze.
- Independent of the Flatpak backend: still freezes with `plasma-discover
--backends packagekit`.
- `plasma-discover --mode update` and `--mode installed` stay responsive; only
the default (Explore) view triggers the loop.
- Font size threshold on my system: 10pt and 11pt → fine; 12pt, 13pt, 14pt →
freeze. Screen scaling is 1 (no fractional scaling).

ENVIRONMENT
- Fedora 44
- plasma-discover 6.7.4 (rpm: plasma-discover-6.7.4-1.fc44)
- Qt 6.11.1 (qt6-qtbase-6.11.1-1.fc44, qt6-qtdeclarative-6.11.1-3.fc44)
- Plasma 6.7.4, Wayland session, locale zh_CN.UTF-8
- General font: Noto Sans (14pt when frozen)

ANALYSIS
The Qt main thread spins forever in a QML layout ↔ text-relayout cycle. All
other threads are idle. Three gdb samples of thread 1, taken seconds apart
while frozen:

Sample 1:
#0  QRecursiveMutex::tryLock(QDeadlineTimer)                       (Qt6Core)
#1  QFontPrivate::engineForScript(int) const                       (Qt6Gui)
#2  QTextEngine::fontEngine(QScriptItem const&, QFixed*, QFixed*, QFixed*)
const
#3  QTextEngine::shapeText(int) const
#4  QTextLine::layout_helper(int)
#5  QQuickTextPrivate::setLineGeometry(QTextLine&, double, double&)
#6  QQuickTextPrivate::setupTextLayout(double*)
#7  QQuickTextPrivate::updateSize()
#8  QQuickText::geometryChange(QRectF const&, QRectF const&)
#9  QQuickLabel::geometryChange(QRectF const&, QRectF const&)     
(Qt6QuickTemplates2)
#10 QQuickItem::setSize(QSizeF const&)
#11 QQuickGridLayoutItem::setGeometry(QRectF const&)              
(Qt6QuickLayouts)
#12 QGridLayoutEngine::setGeometries(QRectF const&, QAbstractLayoutStyleInfo
const*)
#13 QQuickGridLayoutBase::rearrange(QSizeF const&)
#14 QQuickLayout::geometryChange(QRectF const&, QRectF const&)
#15 QQuickItem::setPosition(QPointF const&)
#16 QQuickGridLayoutItem::setGeometry(QRectF const&)
#17 QGridLayoutEngine::setGeometries(QRectF const&, QAbstractLayoutStyleInfo
const*)
#18 QQuickGridLayoutBase::rearrange(QSizeF const&)

Sample 2 (3 seconds later, same cycle seen from the binding side):
#0  QMetaObject::activate(QObject*, QMetaObject const*, int, void**)
#1  QQuickFlickable::setContentHeight(double)
#2  GenericBinding<6>::write(QV4::Value const&, bool,
QFlags<QQmlPropertyData::WriteFlag>)
#3  QQmlBinding::doUpdate(...)
#4  QQmlBinding::update(...)
#5  QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**)
#6  doActivate<false>(QObject*, int, void**)
#7  QQuickItem::setImplicitHeight(double)
#8  GenericBinding<6>::write(...)
#9  QQmlBinding::doUpdate(...)

Sample 3 (again, seconds later):
#0  QChar::direction(char32_t)
#1  QTextEngine::itemize() const
#2  QTextLayout::beginLayout()

So a GridLayout item's geometry change resizes a Label, whose text layout
changes its implicit size, which triggers another GridLayout pass — endlessly,
on the GUI thread.

Happy to provide more samples or test patches if useful.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to