Bug 446934 - Program freezes when scrollbars are almost full but not entirely
Summary: Program freezes when scrollbars are almost full but not entirely
Status: RESOLVED DUPLICATE of bug 448784
Alias: None
Product: frameworks-qqc2-desktop-style
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: Marco Martin
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-12-13 13:51 UTC by Patrick Silva
Modified: 2022-03-25 15:32 UTC (History)
6 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
long backtrace (64.07 KB, text/plain)
2021-12-13 13:51 UTC, Patrick Silva
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Patrick Silva 2021-12-13 13:51:39 UTC
Created attachment 144511 [details]
long backtrace

STEPS TO REPRODUCE
1. load the following url with an internet browser:
https://snapcraft.io/vlc
2. click on 'Install > View in desktop store' button
3. if a 'Open with' dialog shows up, choose Discover

OBSERVED RESULT
Discover opens, freezes and uses an entire CPU core

EXPECTED RESULT
usable Discover and normal CPU usage

SOFTWARE/OS VERSIONS
Operating System: KDE neon Unstable Edition
KDE Plasma Version: 5.23.80
KDE Frameworks Version: 5.89.0
Qt Version: 5.15.3
Graphics Platform: Wayland
Comment 1 Nate Graham 2021-12-14 19:38:23 UTC
Cannot reproduce with git master. It doesn't show VLC, but it also doesn't freeze.
Comment 2 Aleix Pol 2021-12-15 00:48:20 UTC
It worked fine for me, so we have the 3 behaviours. xD

Would you be able to attach to Discover and see where it's stuck?

something like:
$ sudo gdb --pid `pidof plasma-discover`
(wait for it to attach, it takes a while)
(gdb) where

And then send us the backtrace.
Comment 3 Patrick Silva 2021-12-15 10:00:52 UTC
(In reply to Aleix Pol from comment #2)
> It worked fine for me, so we have the 3 behaviours. xD
> 
> Would you be able to attach to Discover and see where it's stuck?
> 
> something like:
> $ sudo gdb --pid `pidof plasma-discover`
> (wait for it to attach, it takes a while)
> (gdb) where
> 
> And then send us the backtrace.

(gdb) where
#0  0x00007f958b8edef0 in QRasterPaintEngine::updatePen (this=0x556eefa19cd0, pen=...)
    at ../../include/QtCore/../../src/corelib/tools/qarraydata.h:236
#1  0x00007f958b8eed59 in QRasterPaintEngine::ensurePen (pen=..., this=<optimized out>)
    at ../../include/QtGui/5.15.3/QtGui/private/../../../../../src/gui/painting/qpaintengine_raster_p.h:251
#2  QRasterPaintEngine::stroke (this=0x556eefa19cd0, path=..., pen=...) at painting/qpaintengine_raster.cpp:1663
#3  0x00007f958b8d4b2b in QPaintEngineEx::draw (this=0x556eefa19cd0, path=...) at painting/qpaintengineex.cpp:632
#4  0x00007f958b8d5f5b in QPaintEngineEx::drawRoundedRect (this=<optimized out>, rect=..., xRadius=<optimized out>, 
    yRadius=<optimized out>, mode=<optimized out>) at painting/qpaintengineex.cpp:807
#5  0x00007f958b901b00 in QPainter::drawRoundedRect (this=this@entry=0x7fff3e27ad70, rect=..., xRadius=xRadius@entry=5, 
    yRadius=yRadius@entry=5, mode=mode@entry=Qt::AbsoluteSize) at painting/qpainter.cpp:4170
#6  0x00007f9584c56972 in Breeze::Helper::renderScrollBarHandle (this=this@entry=0x556eec01e950, 
    painter=painter@entry=0x7fff3e27ad70, rect=..., fg=..., bg=...)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qrect.h:819
#7  0x00007f9584c696cc in Breeze::Style::drawScrollBarSliderControl (widget=0x0, painter=0x7fff3e27ad70, 
    option=0x7fff3e27a9d0, this=0x556eec011750) at /usr/include/x86_64-linux-gnu/qt5/QtGui/qbrush.h:161
#8  Breeze::Style::drawScrollBarSliderControl (this=0x556eec011750, option=0x7fff3e27a9d0, painter=0x7fff3e27ad70, 
    widget=0x0) at ./kstyle/breezestyle.cpp:5235
#9  0x00007f9584c77a7c in std::function<bool (Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*)>::operator()(Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*) const (__args#3=<optimized out>, 
    __args#2=<optimized out>, __args#1=<optimized out>, __args#0=..., this=0x7fff3e27a810)
    at /usr/include/c++/9/bits/std_function.h:683
#10 Breeze::Style::drawControl (this=0x556eec011750, element=QStyle::CE_ScrollBarSlider, option=0x7fff3e27a9d0, 
    painter=0x7fff3e27ad70, widget=0x0) at ./kstyle/breezestyle.cpp:1066
#11 0x00007f958c4d940f in QCommonStyle::drawComplexControl (this=this@entry=0x556eec011750, 
    cc=cc@entry=QStyle::CC_ScrollBar, opt=opt@entry=0x556eefd8ce00, p=p@entry=0x7fff3e27ad70, widget=widget@entry=0x0)
    at styles/qcommonstyle.cpp:3376
#12 0x00007f9584c787a9 in Breeze::Style::drawScrollBarComplexControl (this=0x556eec011750, option=0x556eefd8ce00, 
--Type <RET> for more, q to quit, c to continue without paging--c
    painter=0x7fff3e27ad70, widget=0x0) at ./kstyle/breezestyle.cpp:6917
#13 0x00007f9584c78220 in std::function<bool (Breeze::Style const&, QStyleOptionComplex const*, QPainter*, QWidget const*)>::operator()(Breeze::Style const&, QStyleOptionComplex const*, QPainter*, QWidget const*) const (__args#3=<optimized out>, __args#2=<optimized out>, __args#1=<optimized out>, __args#0=..., this=0x7fff3e27ac10) at /usr/include/c++/9/bits/std_function.h:683
#14 Breeze::Style::drawComplexControl (this=0x556eec011750, element=QStyle::CC_ScrollBar, option=0x556eefd8ce00, painter=0x7fff3e27ad70, widget=0x0) at ./kstyle/breezestyle.cpp:1097
#15 0x00007f957c05b10f in ?? () from /usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/qqc2desktopstyle/private/libqqc2desktopstyleplugin.so
#16 0x00007f957c05bea4 in ?? () from /usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/qqc2desktopstyle/private/libqqc2desktopstyleplugin.so
#17 0x00007f958ce96d9c in QQuickWindowPrivate::polishItems (this=0x556eec37ede0) at items/qquickwindow.cpp:393
#18 0x00007f958ce38085 in QSGThreadedRenderLoop::polishAndSync (this=this@entry=0x556eec1ef540, w=0x556eecd9d0b0, inExpose=inExpose@entry=false) at scenegraph/qsgthreadedrenderloop.cpp:1577
#19 0x00007f958ce38df4 in QSGThreadedRenderLoop::handleUpdateRequest (this=0x556eec1ef540, window=0x556eec076ed0) at scenegraph/qsgthreadedrenderloop.cpp:1430
#20 0x00007f958cea3fa7 in QQuickWindow::event (this=0x556eec076ed0, e=0x7fff3e27b2c0) at items/qquickwindow.cpp:1857
#21 0x00007f958c448dc3 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x556eec076ed0, e=0x7fff3e27b2c0) at kernel/qapplication.cpp:3632
#22 0x00007f958c451bb8 in QApplication::notify(QObject*, QEvent*) () at kernel/qapplication.cpp:3156
#23 0x00007f958b254daa in QCoreApplication::notifyInternal2 (receiver=0x556eec076ed0, event=0x7fff3e27b2c0) at ../../include/QtCore/5.15.3/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#24 0x00007f958b627c7d in QPlatformWindow::deliverUpdateRequest (this=this@entry=0x556eec4de670) at kernel/qplatformwindow.cpp:789
#25 0x00007f9586b4467e in QtWaylandClient::QWaylandWindow::deliverUpdateRequest (this=0x556eec4de660) at qwaylandwindow.cpp:1220
#26 0x00007f958b282949 in QObject::event (this=0x556eec4de660, e=0x556eecb6a690) at kernel/qobject.cpp:1314
#27 0x00007f958c448dc3 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x556eec4de660, e=0x556eecb6a690) at kernel/qapplication.cpp:3632
#28 0x00007f958c451bb8 in QApplication::notify(QObject*, QEvent*) () at kernel/qapplication.cpp:3156
#29 0x00007f958b254daa in QCoreApplication::notifyInternal2 (receiver=0x556eec4de660, event=0x556eecb6a690) at ../../include/QtCore/5.15.3/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#30 0x00007f958b2576b1 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x556eebfe6760) at kernel/qcoreapplication.cpp:1821
#31 0x00007f958b2affa7 in postEventSourceDispatch (s=0x556eec00e1e0) at kernel/qeventdispatcher_glib.cpp:277
#32 0x00007f9589a4d17d in g_main_dispatch (context=0x556eec00bf50) at ../../../glib/gmain.c:3309
#33 g_main_context_dispatch (context=context@entry=0x556eec00bf50) at ../../../glib/gmain.c:3974
#34 0x00007f9589a4d400 in g_main_context_iterate (context=context@entry=0x556eec00bf50, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4047
#35 0x00007f9589a4d4a3 in g_main_context_iteration (context=0x556eec00bf50, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108
#36 0x00007f958b2af602 in QEventDispatcherGlib::processEvents (this=0x556eebfbbfb0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#37 0x00007f958b2538ab in QEventLoop::exec (this=this@entry=0x7fff3e27b8d0, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
#38 0x00007f958b25ba64 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#39 0x0000556eeb0645f4 in main (argc=<optimized out>, argv=<optimized out>) at ./discover/main.cpp:213
Comment 4 Aleix Pol 2021-12-17 01:03:24 UTC
Right, this has nothing to do with snap, it's a bug in either Breeze Style, QCC2 Desktop Style. I reproduced it once and produced a fix that doesn't fix it entirely.
https://invent.kde.org/frameworks/qqc2-desktop-style/-/merge_requests/108

Will have to look into it, I cannot reproduce it again now, so it's a bit complex.
Comment 5 Aleix Pol 2021-12-17 01:06:30 UTC
*** Bug 447080 has been marked as a duplicate of this bug. ***
Comment 6 Nate Graham 2022-03-25 15:32:02 UTC

*** This bug has been marked as a duplicate of bug 448784 ***