Bug 445865

Summary: Konsole hangs at TerminalPainter
Product: [Applications] konsole Reporter: ratijas <me>
Component: kpartAssignee: Konsole Developer <konsole-devel>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: master   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: attachment-7292-0.html

Description ratijas 2021-11-21 14:29:56 UTC
SUMMARY

Konsole (as well as Yakuake and any other software using kpart plugin) hangs when trying to draw my quick search menu (Ctrl+R which bound to fzf, A command-line fuzzy finder). Backtrace attached at the end.

STEPS TO REPRODUCE
1. Open Konsole
2. Run fzf

OBSERVED RESULT
Sometimes it hangs completely. Other times it keeps running as normal.

EXPECTED RESULT
Shouldn't hang up.

SOFTWARE/OS VERSIONS
Operating System: Arch Linux
KDE Plasma Version: 5.23.80
KDE Frameworks Version: 5.89.0
Qt Version: 5.15.2
Kernel Version: 5.15.3-arch1-1 (64-bit)
Graphics Platform: X11
Processors: 8 × Intel® Core™ i7-6700HQ CPU @ 2.60GHz
Memory: 15.6 GiB of RAM
Graphics Processor: NVIDIA GeForce GTX 970M/PCIe/SSE2

ADDITIONAL INFORMATION

(gdb) attach 5412
Attaching to process 5412
[New LWP 5414]
[New LWP 5415]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
0x00007f82892f77e6 in operator() (__closure=0x7ffdd9f14800, column=1) at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
99                  const auto isInsideDrawArea = [&](int column) {
(gdb) info threads 
  Id   Target Id                                          Frame 
* 1    Thread 0x7f82818f7f40 (LWP 5412) "konsole"         0x00007f82892f77e6 in operator() (__closure=0x7ffdd9f14800, column=1) at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
  2    Thread 0x7f82813ce640 (LWP 5414) "QXcbEventQueue"  0x00007f8286219b2f in poll () from /usr/lib/libc.so.6
  3    Thread 0x7f827bfff640 (LWP 5415) "QDBusConnection" 0x00007f8286219b2f in poll () from /usr/lib/libc.so.6
(gdb) bt
#0  0x00007f82892f77e6 in operator() (__closure=0x7ffdd9f14800, column=1) at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
#1  0x00007f82892f7fd5 in Konsole::TerminalPainter::drawContents (this=0x565299c1dfb0, image=0x565299c92bd0, paint=..., rect=..., printerFriendly=false, imageSize=1920, bidiEnabled=true, lineProperties=...)
    at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:144
#2  0x00007f82892f6e69 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2, 3, 4, 5, 6>, QtPrivate::List<Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char> >, void, void (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char>)>::call (f=
    (void (Konsole::TerminalPainter::*)(Konsole::TerminalPainter * const, Konsole::Character *, QPainter &, const QRect &, bool, int, bool, QVector<unsigned char>)) 0x7f82892f78b8 <Konsole::TerminalPainter::drawContents(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char>)>, o=0x565299c1dfb0, arg=0x7ffdd9f14b70) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#3  0x00007f82892f660e in QtPrivate::FunctionPointer<void (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char>)>::call<QtPrivate::List<Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char> >, void> (f=
    (void (Konsole::TerminalPainter::*)(Konsole::TerminalPainter * const, Konsole::Character *, QPainter &, const QRect &, bool, int, bool, QVector<unsigned char>)) 0x7f82892f78b8 <Konsole::TerminalPainter::drawContents(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char>)>, o=0x565299c1dfb0, arg=0x7ffdd9f14b70) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#4  0x00007f82892f5a67 in QtPrivate::QSlotObject<void (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char>), QtPrivate::List<Konsole::Character*, QPainter&, QRect const&, bool, int, bool, QVector<unsigned char> >, void>::impl (which=1, this_=0x565299c1e030, r=0x565299c1dfb0, a=0x7ffdd9f14b70, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#5  0x00007f82869577ab in ?? () from /usr/lib/libQt5Core.so.5
#6  0x00007f82892406a1 in Konsole::TerminalDisplay::drawContents (this=0x565299ad4400, _t1=0x565299c92bd0, _t2=..., _t3=..., _t4=false, _t5=1920, _t6=true, _t7=...)
    at /home/ratijas/kde/build/kde/applications/konsole/src/konsoleprivate_autogen/DRAQINE3W2/moc_TerminalDisplay.cpp:612
#7  0x00007f82892e4734 in Konsole::TerminalDisplay::paintEvent (this=0x565299ad4400, pe=0x7ffdd9f14e90) at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalDisplay.cpp:727
#8  0x00007f82876740be in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#9  0x00007f82892ed87c in Konsole::TerminalDisplay::event (this=0x565299ad4400, event=0x7ffdd9f14e90) at /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalDisplay.cpp:2561
#10 0x00007f8287630d62 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#11 0x00007f82869203fa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#12 0x00007f828766bcf8 in QWidgetPrivate::sendPaintEvent(QRegion const&) () from /usr/lib/libQt5Widgets.so.5
#13 0x00007f828766c55c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*, QWidgetRepaintManager*) () from /usr/lib/libQt5Widgets.so.5
#14 0x00007f8287642278 in ?? () from /usr/lib/libQt5Widgets.so.5
#15 0x00007f8287674829 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#16 0x00007f8288c8c5bf in KMainWindow::event (this=0x7f827c003760, ev=0x565299c91e50) at /home/ratijas/kde/src/frameworks/kxmlgui/src/kmainwindow.cpp:936
#17 0x00007f8288ce169f in KXmlGuiWindow::event (this=0x7f827c003760, ev=0x565299c91e50) at /home/ratijas/kde/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:219
#18 0x00007f8287630d62 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#19 0x00007f82869203fa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#20 0x00007f82869234f9 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#21 0x00007f82869799f4 in ?? () from /usr/lib/libQt5Core.so.5
#22 0x00007f828428eaba in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#23 0x00007f828428f2f2 in g_main_context_iterate () from /usr/lib/libglib-2.0.so.0
#24 0x00007f828428f4ae in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#25 0x00007f8286979026 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#26 0x00007f828691ed6c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#27 0x00007f82869272d4 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#28 0x000056529784498b in main (argc=1, argv=0x7ffdd9f15b48) at /home/ratijas/kde/src/kde/applications/konsole/src/main.cpp:242
Comment 1 tcanabrava 2021-11-21 14:53:59 UTC
Created attachment 143803 [details]
attachment-7292-0.html

Yeah, that was my mistake (never code while sleepy. Waqar is helping me to
fix as I am away from the computer today)


On Sun, 21 Nov 2021 at 11:30 ratijas <bugzilla_noreply@kde.org> wrote:

> https://bugs.kde.org/show_bug.cgi?id=445865
>
>             Bug ID: 445865
>            Summary: Konsole hangs at TerminalPainter
>            Product: konsole
>            Version: master
>           Platform: Other
>                 OS: Linux
>             Status: REPORTED
>           Severity: normal
>           Priority: NOR
>          Component: kpart
>           Assignee: konsole-devel@kde.org
>           Reporter: me@ratijas.tk
>   Target Milestone: ---
>
> SUMMARY
>
> Konsole (as well as Yakuake and any other software using kpart plugin)
> hangs
> when trying to draw my quick search menu (Ctrl+R which bound to fzf, A
> command-line fuzzy finder). Backtrace attached at the end.
>
> STEPS TO REPRODUCE
> 1. Open Konsole
> 2. Run fzf
>
> OBSERVED RESULT
> Sometimes it hangs completely. Other times it keeps running as normal.
>
> EXPECTED RESULT
> Shouldn't hang up.
>
> SOFTWARE/OS VERSIONS
> Operating System: Arch Linux
> KDE Plasma Version: 5.23.80
> KDE Frameworks Version: 5.89.0
> Qt Version: 5.15.2
> Kernel Version: 5.15.3-arch1-1 (64-bit)
> Graphics Platform: X11
> Processors: 8 × Intel® Core™ i7-6700HQ CPU @ 2.60GHz
> Memory: 15.6 GiB of RAM
> Graphics Processor: NVIDIA GeForce GTX 970M/PCIe/SSE2
>
> ADDITIONAL INFORMATION
>
> (gdb) attach 5412
> Attaching to process 5412
> [New LWP 5414]
> [New LWP 5415]
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/usr/lib/libthread_db.so.1".
> 0x00007f82892f77e6 in operator() (__closure=0x7ffdd9f14800, column=1) at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
> 99                  const auto isInsideDrawArea = [&](int column) {
> (gdb) info threads
>   Id   Target Id                                          Frame
> * 1    Thread 0x7f82818f7f40 (LWP 5412) "konsole"
>  0x00007f82892f77e6 in
> operator() (__closure=0x7ffdd9f14800, column=1) at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
>   2    Thread 0x7f82813ce640 (LWP 5414) "QXcbEventQueue"
> 0x00007f8286219b2f in
> poll () from /usr/lib/libc.so.6
>   3    Thread 0x7f827bfff640 (LWP 5415) "QDBusConnection"
> 0x00007f8286219b2f in
> poll () from /usr/lib/libc.so.6
> (gdb) bt
> #0  0x00007f82892f77e6 in operator() (__closure=0x7ffdd9f14800, column=1)
> at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:99
> #1  0x00007f82892f7fd5 in Konsole::TerminalPainter::drawContents
> (this=0x565299c1dfb0, image=0x565299c92bd0, paint=..., rect=...,
> printerFriendly=false, imageSize=1920, bidiEnabled=true,
> lineProperties=...)
>     at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalPainter.cpp:144
> #2  0x00007f82892f6e69 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0,
> 1,
> 2, 3, 4, 5, 6>, QtPrivate::List<Konsole::Character*, QPainter&, QRect
> const&,
> bool, int, bool, QVector<unsigned char> >, void, void
> (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&,
> bool, int, bool, QVector<unsigned char>)>::call (f=
>     (void (Konsole::TerminalPainter::*)(Konsole::TerminalPainter * const,
> Konsole::Character *, QPainter &, const QRect &, bool, int, bool,
> QVector<unsigned char>)) 0x7f82892f78b8
> <Konsole::TerminalPainter::drawContents(Konsole::Character*, QPainter&,
> QRect
> const&, bool, int, bool, QVector<unsigned char>)>, o=0x565299c1dfb0,
> arg=0x7ffdd9f14b70) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
> #3  0x00007f82892f660e in QtPrivate::FunctionPointer<void
> (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&,
> bool, int, bool, QVector<unsigned
> char>)>::call<QtPrivate::List<Konsole::Character*, QPainter&, QRect const&,
> bool, int, bool, QVector<unsigned char> >, void> (f=
>     (void (Konsole::TerminalPainter::*)(Konsole::TerminalPainter * const,
> Konsole::Character *, QPainter &, const QRect &, bool, int, bool,
> QVector<unsigned char>)) 0x7f82892f78b8
> <Konsole::TerminalPainter::drawContents(Konsole::Character*, QPainter&,
> QRect
> const&, bool, int, bool, QVector<unsigned char>)>, o=0x565299c1dfb0,
> arg=0x7ffdd9f14b70) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
> #4  0x00007f82892f5a67 in QtPrivate::QSlotObject<void
> (Konsole::TerminalPainter::*)(Konsole::Character*, QPainter&, QRect const&,
> bool, int, bool, QVector<unsigned char>),
> QtPrivate::List<Konsole::Character*,
> QPainter&, QRect const&, bool, int, bool, QVector<unsigned char> >,
> void>::impl
> (which=1, this_=0x565299c1e030, r=0x565299c1dfb0, a=0x7ffdd9f14b70,
> ret=0x0) at
> /usr/include/qt/QtCore/qobjectdefs_impl.h:418
> #5  0x00007f82869577ab in ?? () from /usr/lib/libQt5Core.so.5
> #6  0x00007f82892406a1 in Konsole::TerminalDisplay::drawContents
> (this=0x565299ad4400, _t1=0x565299c92bd0, _t2=..., _t3=..., _t4=false,
> _t5=1920, _t6=true, _t7=...)
>     at
>
> /home/ratijas/kde/build/kde/applications/konsole/src/konsoleprivate_autogen/DRAQINE3W2/moc_TerminalDisplay.cpp:612
> #7  0x00007f82892e4734 in Konsole::TerminalDisplay::paintEvent
> (this=0x565299ad4400, pe=0x7ffdd9f14e90) at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalDisplay.cpp:727
> #8  0x00007f82876740be in QWidget::event(QEvent*) () from
> /usr/lib/libQt5Widgets.so.5
> #9  0x00007f82892ed87c in Konsole::TerminalDisplay::event
> (this=0x565299ad4400,
> event=0x7ffdd9f14e90) at
>
> /home/ratijas/kde/src/kde/applications/konsole/src/terminalDisplay/TerminalDisplay.cpp:2561
> #10 0x00007f8287630d62 in QApplicationPrivate::notify_helper(QObject*,
> QEvent*)
> () from /usr/lib/libQt5Widgets.so.5
> #11 0x00007f82869203fa in QCoreApplication::notifyInternal2(QObject*,
> QEvent*)
> () from /usr/lib/libQt5Core.so.5
> #12 0x00007f828766bcf8 in QWidgetPrivate::sendPaintEvent(QRegion const&) ()
> from /usr/lib/libQt5Widgets.so.5
> #13 0x00007f828766c55c in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion
> const&, QPoint const&, QFlags<QWidgetPrivate::DrawWidgetFlag>, QPainter*,
> QWidgetRepaintManager*) () from /usr/lib/libQt5Widgets.so.5
> #14 0x00007f8287642278 in ?? () from /usr/lib/libQt5Widgets.so.5
> #15 0x00007f8287674829 in QWidget::event(QEvent*) () from
> /usr/lib/libQt5Widgets.so.5
> #16 0x00007f8288c8c5bf in KMainWindow::event (this=0x7f827c003760,
> ev=0x565299c91e50) at
> /home/ratijas/kde/src/frameworks/kxmlgui/src/kmainwindow.cpp:936
> #17 0x00007f8288ce169f in KXmlGuiWindow::event (this=0x7f827c003760,
> ev=0x565299c91e50) at
> /home/ratijas/kde/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:219
> #18 0x00007f8287630d62 in QApplicationPrivate::notify_helper(QObject*,
> QEvent*)
> () from /usr/lib/libQt5Widgets.so.5
> #19 0x00007f82869203fa in QCoreApplication::notifyInternal2(QObject*,
> QEvent*)
> () from /usr/lib/libQt5Core.so.5
> #20 0x00007f82869234f9 in
> QCoreApplicationPrivate::sendPostedEvents(QObject*,
> int, QThreadData*) () from /usr/lib/libQt5Core.so.5
> #21 0x00007f82869799f4 in ?? () from /usr/lib/libQt5Core.so.5
> #22 0x00007f828428eaba in g_main_context_dispatch () from
> /usr/lib/libglib-2.0.so.0
> #23 0x00007f828428f2f2 in g_main_context_iterate () from
> /usr/lib/libglib-2.0.so.0
> #24 0x00007f828428f4ae in g_main_context_iteration () from
> /usr/lib/libglib-2.0.so.0
> #25 0x00007f8286979026 in
> QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
> ()
> from /usr/lib/libQt5Core.so.5
> #26 0x00007f828691ed6c in
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
> /usr/lib/libQt5Core.so.5
> #27 0x00007f82869272d4 in QCoreApplication::exec() () from
> /usr/lib/libQt5Core.so.5
> #28 0x000056529784498b in main (argc=1, argv=0x7ffdd9f15b48) at
> /home/ratijas/kde/src/kde/applications/konsole/src/main.cpp:242
>
> --
> You are receiving this mail because:
> You are the assignee for the bug.
Comment 2 ratijas 2021-11-22 14:45:05 UTC
I can confirm that this has been fixed in the 645b92a562b77fa3c3d1ce8777320429cdb86aae.

https://invent.kde.org/utilities/konsole/-/commit/645b92a562b77fa3c3d1ce8777320429cdb86aae