Summary: | Cantata crashes with breeze | ||
---|---|---|---|
Product: | [Plasma] Breeze | Reporter: | pmargeti34 |
Component: | general | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | kde, kde, nate |
Priority: | VHI | Keywords: | regression |
Version: | 5.20.90 | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
URL: | https://github.com/CDrummond/cantata/issues/1672 | ||
Latest Commit: | https://invent.kde.org/plasma/breeze/commit/7bd37a18d5695c748bfbf650023d63ca64869097 | Version Fixed In: | 5.21 |
Description
pmargeti34
2021-01-28 12:30:16 UTC
Is it possible to get debug symbols for breeze please #0 QRasterPaintEngine::penChanged (this=0x7fffec007fd0) at painting/qpaintengine_raster.cpp:700 #1 0x00007ffff6b666d0 in QPainter::setPen (this=<optimized out>, pen=...) at painting/qpainter.cpp:3923 #2 0x00007fffea9720c5 in Breeze::Style::drawWidgetPrimitive (this=0x555555e6b2e0, option=0x7fffffffc090, painter=0x7fffffffc200, widget=0x7fffffffd380) at /home/david/kde/src/breeze/kstyle/breezestyle.cpp:972 #3 0x00007fffea99a05d in std::__invoke_impl<bool, bool (Breeze::Style::*&)(QStyleOption const*, QPainter*, QWidget const*) const, Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*> (__f= @0x7fffffffbf40: (bool (Breeze::Style::*)(const Breeze::Style * const, const QStyleOption *, QPainter *, const QWidget *)) 0x7fffea971ea4 <Breeze::Style::drawWidgetPrimitive(QStyleOption const*, QPainter*, QWidget const*) const>, __t=...) at /usr/include/c++/9/bits/invoke.h:66 #4 0x00007fffea9996c3 in std::__invoke<bool (Breeze::Style::*&)(QStyleOption const*, QPainter*, QWidget const*) const, Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*> (__fn= @0x7fffffffbf40: (bool (Breeze::Style::*)(const Breeze::Style * const, const QStyleOption *, QPainter *, const QWidget *)) 0x7fffea971ea4 <Breeze::Style::drawWidgetPrimitive(QStyleOption const*, QPainter*, QWidget const*) const>) at /usr/include/c++/9/bits/invoke.h:95 #5 0x00007fffea99873b in std::_Function_handler<bool (Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*), bool (Breeze::Style::*)(QStyleOption const*, QPainter*, QWidget const*) const>::_M_invoke(std::_Any_data const&, Breeze::Style const&, QStyleOption const*&&, QPainter*&&, QWidget const*&&) (__functor=..., __args#0=..., __args#1=@0x7fffffffbeb8: 0x7fffffffc090, __args#2=@0x7fffffffbeb0: 0x7fffffffc200, __args#3=@0x7fffffffbea8: 0x7fffffffd380) at /usr/include/c++/9/bits/std_function.h:317 #6 0x00007fffea99563e in std::function<bool (Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*)>::operator()(Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*) const (this=0x7fffffffbf40, __args#0=..., __args#1=0x7fffffffc090, __args#2=0x7fffffffc200, __args#3=0x7fffffffd380) at /usr/include/c++/9/bits/std_function.h:688 #7 0x00007fffea971e40 in Breeze::Style::drawPrimitive (this=0x555555e6b2e0, element=QStyle::PE_Widget, option=0x7fffffffc090, painter=0x7fffffffc200, widget=0x7fffffffd380) at /home/david/kde/src/breeze/kstyle/breezestyle.cpp:948 #8 0x0000555555aeba3e in ProxyStyle::drawPrimitive(QStyle::PrimitiveElement, QStyleOption const*, QPainter*, QWidget const*) const () #9 0x00007ffff6fcfd21 in QWidgetPrivate::paintBackground (this=this@entry=0x555555fad040, painter=painter@entry=0x7fffffffc200, rgn=..., flags=...) at kernel/qwidget.cpp:2280 #10 0x00007ffff6fd40c3 in QWidgetPrivate::drawWidget (this=0x555555fad040, pdev=0x555556897a70, rgn=..., offset=..., flags=..., sharedPainter=0x0, repaintManager=0x5555566bcf50) at kernel/qwidget.cpp:5357 #11 0x00007ffff6faa499 in QWidgetRepaintManager::paintAndFlush (this=this@entry=0x5555566bcf50) at ../../include/QtCore/../../src/corelib/tools/qpoint.h:122 #12 0x00007ffff6faad9f in QWidgetRepaintManager::sync (this=0x5555566bcf50, exposedWidget=0x7fffffffd380, exposedRegion=...) at kernel/qwidgetrepaintmanager.cpp:743 #13 0x00007ffff6ff885c in QWidgetWindow::handleExposeEvent (this=<optimized out>, event=0x7fffffffc930) at ../../include/QtGui/../../src/gui/kernel/qevent.h:479 #14 0x00007ffff6ff9258 in QWidgetWindow::event (event=0x7fffffffc930, this=0x5555566bca60) at kernel/qwidgetwindow.cpp:347 #15 QWidgetWindow::event (this=0x5555566bca60, event=0x7fffffffc930) at kernel/qwidgetwindow.cpp:239 #16 0x00007ffff6f97dc3 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x5555566bca60, e=0x7fffffffc930) at kernel/qapplication.cpp:3632 #17 0x00007ffff6fa0bb8 in QApplication::notify(QObject*, QEvent*) () at kernel/qapplication.cpp:3156 --Type <RET> for more, q to quit, c to continue without paging-- #18 0x00007ffff64c069a in QCoreApplication::notifyInternal2 (receiver=0x5555566bca60, event=0x7fffffffc930) at ../../include/QtCore/5.15.2/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325 #19 0x00007ffff68a3823 in QGuiApplicationPrivate::processExposeEvent (e=0x555556876230) at kernel/qguiapplication.cpp:3258 #20 0x00007ffff68a3a5b in QGuiApplicationPrivate::processWindowSystemEvent (e=0x555556876230) at kernel/qguiapplication.cpp:2070 #21 0x00007ffff687b7ac in QWindowSystemInterface::sendWindowSystemEvents (flags=flags@entry=...) at kernel/qwindowsysteminterface.cpp:1169 #22 0x00007ffff1fa0d7e in xcbSourceDispatch (source=<optimized out>) at qxcbeventdispatcher.cpp:105 #23 0x00007ffff4fa1fbd in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #24 0x00007ffff4fa2240 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #25 0x00007ffff4fa22e3 in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 #26 0x00007ffff651afa2 in QEventDispatcherGlib::processEvents (this=0x555555e97f80, flags=...) at kernel/qeventdispatcher_glib.cpp:423 #27 0x00007ffff64bf1ab in QEventLoop::exec (this=this@entry=0x7fffffffcc10, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141 #28 0x00007ffff64c7354 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #29 0x000055555572f9e1 in main () Before the crash I get a QWidget::repaint: Recursive repaint detected QBackingStore::endPaint() called with active painter; did you forget to destroy it or call QPainter::end() on it? in the console. Running it in valgrind: https://invent.kde.org/-/snippets/1475 Bisected it to 509ff6bc48f4baef7e0965071f9ee5b5a1840474 Doesn't crash on master with colorscheme that has not header colors group, so something with drawing the header area I suppose. Thank you for providing debug symbols @David Redondo And found. The bug is slightly before. #18 0x0000555555742bcd in MainWindow::controlView(bool) () #19 0x00007ffff70418a9 in QWidget::event (this=0x7fffffffda60, event=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qwidget.cpp:8810 #20 0x00007ffff71c84e4 in QMainWindow::event (this=0x7fffffffda60, event=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/widgets/widgets/qmainwindow.cpp:1341 #21 0x00007ffff6ff3d3b in QApplicationPrivate::notify_helper (this=0x555555d3ebe0, receiver=0x7fffffffda60, e=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3632 #22 0x00007ffff6ff3b2c in QApplication::notify (this=0x7fffffffd790, receiver=0x7fffffffda60, e=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3582 #23 0x00007ffff61649c5 in QCoreApplication::notifyInternal2 (receiver=0x7fffffffda60, event=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1064 #24 0x00007ffff616541c in QCoreApplication::sendEvent (receiver=0x7fffffffda60, event=0x7fffffffbc50) at /home/david/projects/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1462 #25 0x00007ffff703d978 in QWidgetPrivate::updateContentsRect (this=0x555555ef0480) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qwidget.cpp:7399 #26 0x00007ffff703d837 in QWidget::setContentsMargins (this=0x7fffffffda60, left=0, top=1, right=0, bottom=0) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qwidget.cpp:7362 #27 0x00007fffea8c46e3 in Breeze::ToolsAreaManager::toolsAreaRect (this=0x555555e87400, window=0x7fffffffda60) at /home/david/projects/kde5/src/kde/workspace/breeze/kstyle/breezetoolsareamanager.cpp:69 #28 0x00007fffea898355 in Breeze::Style::drawWidgetPrimitive (this=0x555555e718d0, option=0x7fffffffc470, painter=0x7fffffffc5a0, widget=0x7fffffffda60) at /home/david/projects/kde5/src/kde/workspace/breeze/kstyle/breezestyle.cpp:965 #29 0x00007fffea8b748c in std::__invoke_impl<bool, bool (Breeze::Style::*&)(QStyleOption const*, QPainter*, QWidget const*) const, Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*> (__f= @0x7fffffffc348: (bool (Breeze::Style::*)(const Breeze::Style * const, const QStyleOption *, QPainter *, const QWidget *)) 0x7fffea898250 <Breeze::Style::drawWidgetPrimitive(QStyleOption const*, QPainter*, QWidget const*) const>, __t=..., __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60) at /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/invoke.h:66 #30 0x00007fffea8b7351 in std::__invoke_r<bool, bool (Breeze::Style::*&)(QStyleOption const*, QPainter*, QWidget const*) const, Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*> (__fn= @0x7fffffffc348: (bool (Breeze::Style::*)(const Breeze::Style * const, const QStyleOption *, QPainter *, const QWidget *)) 0x7fffea898250 <Breeze::Style::drawWidgetPrimitive(QStyleOption const*, QPainter*, QWidget const*) const>, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60) at /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/invoke.h:141 #31 0x00007fffea8b71f1 in std::_Function_handler<bool (Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*), bool (Breeze::Style::*)(QStyleOption const*, QPainter*, QWidget const*) const>::_M_invoke(std::_Any_data const&, Breeze::Style const&, QStyleOption const*&&, QPainter*&&, QWidget const*&&) (__functor=..., __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60, __args=@0x7fffffffc110: 0x7fffffffda60) at /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/std_function.h:291 #32 0x00007fffea8b0e83 in std::function<bool (Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*)>::operator()(Breeze::Style const&, QStyleOption const*, QPainter*, QWidget const*) const (this=0x7fffffffc348, __args=0x7fffffffda60, __args=0x7fffffffda60, __args=0x7fffffffda60, __args=0x7fffffffda60) at /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/bits/std_function.h:622 #33 0x00007fffea892f14 in Breeze::Style::drawPrimitive (this=0x555555e718d0, element=QStyle::PE_Widget, option=0x7fffffffc470, painter=0x7fffffffc5a0, widget=0x7fffffffda60) at /home/david/projects/kde5/src/kde/workspace/breeze/kstyle/breezestyle.cpp:948 #34 0x0000555555ad816a in ProxyStyle::drawPrimitive(QStyle::PrimitiveElement, QStyleOption const*, QPainter*, QWidget const*) const () #35 0x00007ffff702ec2a in QWidgetPrivate::paintBackground (this=0x555555ef0480, painter=0x7fffffffc5a0, rgn=..., flags=...) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qwidget.cpp:2280 #36 0x00007ffff70370b2 in QWidgetPrivate::drawWidget (this=0x555555ef0480, pdev=0x55555636ae80, rgn=..., offset=..., flags=..., sharedPainter=0x0, repaintManager=0x555556745800) at /home/david/projects/qt5/qtbase/src/widgets/kernel/qwidget.cpp:5357 We *absolutely* must not perform a resize inside a paint function! A possibly relevant merge request was started @ https://invent.kde.org/plasma/breeze/-/merge_requests/73 Git commit 0deecb4d57aef085b8eb0b8b24e916201bfa1f2c by David Redondo. Committed on 28/01/2021 at 14:45. Pushed by ngraham into branch 'master'. Move QMainWindow contentMargins setting to polish Never mutate a widget while painting! This causes recursive repaints and makes prorgams crash. There is a reason why const_casts are discouraged. FIXED-IN: 5.21 M +6 -0 kstyle/breezestyle.cpp M +2 -11 kstyle/breezetoolsareamanager.cpp M +2 -2 kstyle/breezetoolsareamanager.h https://invent.kde.org/plasma/breeze/commit/0deecb4d57aef085b8eb0b8b24e916201bfa1f2c Git commit 6d3f235f4e757d4684f8fabd1d647615df55c0d6 by Nate Graham, on behalf of David Redondo. Committed on 28/01/2021 at 15:50. Pushed by ngraham into branch 'Plasma/5.21'. Move QMainWindow contentMargins setting to polish Never mutate a widget while painting! This causes recursive repaints and makes prorgams crash. There is a reason why const_casts are discouraged. FIXED-IN: 5.21 (cherry picked from commit 0deecb4d57aef085b8eb0b8b24e916201bfa1f2c) M +6 -0 kstyle/breezestyle.cpp M +2 -11 kstyle/breezetoolsareamanager.cpp M +2 -2 kstyle/breezetoolsareamanager.h https://invent.kde.org/plasma/breeze/commit/6d3f235f4e757d4684f8fabd1d647615df55c0d6 Reopen because commit was reverted Git commit 03fb4b49008f1bcbf5feb685c2d542f3374b20e2 by Jan Blackquill. Committed on 04/02/2021 at 02:50. Pushed by cblack into branch 'master'. [kstyle]: Don't attempt to adjust contentsMargins on QMainWindows For most applications, this isn't necessary as they rarely draw in the top pixel, and implementing this safely is problematic. M +1 -9 kstyle/breezetoolsareamanager.cpp M +1 -1 kstyle/breezetoolsareamanager.h https://invent.kde.org/plasma/breeze/commit/03fb4b49008f1bcbf5feb685c2d542f3374b20e2 Git commit 7bd37a18d5695c748bfbf650023d63ca64869097 by Jan Blackquill. Committed on 04/02/2021 at 02:54. Pushed by cblack into branch 'Plasma/5.21'. [kstyle]: Don't attempt to adjust contentsMargins on QMainWindows For most applications, this isn't necessary as they rarely draw in the top pixel, and implementing this safely is problematic. M +1 -9 kstyle/breezetoolsareamanager.cpp M +1 -1 kstyle/breezetoolsareamanager.h https://invent.kde.org/plasma/breeze/commit/7bd37a18d5695c748bfbf650023d63ca64869097 |