Kate and KDevelop use the KMessageWidget nowadays, but at least for me on QtCurve I can easily trigger crashes due to infinite recursion in KMessageWidget::animatedShow Reproducible: Always Steps to Reproduce: 1. cd /tmp 2. touch a b c 3. kate a b c 4. write some text into all three files, don't save any 5. killall -9 kate 6. kate a b c 7. press alt left or right a few times (i.e. switch between the three views) Actual Results: crash due to infinite recursion: (gdb) bt #0 0x00007ffff5b2e9b4 in ?? () from /usr/lib/libQtGui.so.4 #1 0x00007ffff5b2fc79 in ?? () from /usr/lib/libQtGui.so.4 #2 0x00007ffff5b4a890 in QWidget::heightForWidth(int) const () from /usr/lib/libQtGui.so.4 #3 0x00007ffff68e61b1 in ?? () from /usr/lib/libkdeui.so.5 #4 0x00007ffff68e61f7 in KMessageWidget::resizeEvent(QResizeEvent*) () from /usr/lib/libkdeui.so.5 #5 0x00007ffff5b5bc15 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 #6 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 #7 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #8 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #9 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 #10 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 #11 0x00007ffff5b561e6 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib/libQtGui.so.4 #12 0x00007ffff5b5960b in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #13 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #14 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #15 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #16 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #17 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #18 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #19 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #20 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #21 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #22 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 ---Type <return> to continue, or q <return> to quit--- #23 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #24 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #25 0x00007ffff5b598d0 in QWidgetPrivate::prepareToRender(QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #26 0x00007ffff5b59a56 in QWidgetPrivate::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>, bool) () from /usr/lib/libQtGui.so.4 #27 0x00007ffff5b59e99 in QWidget::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #28 0x00007ffff68e60db in ?? () from /usr/lib/libkdeui.so.5 #29 0x00007ffff68e6241 in KMessageWidget::resizeEvent(QResizeEvent*) () from /usr/lib/libkdeui.so.5 #30 0x00007ffff5b5bc15 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 #31 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 #32 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #33 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #34 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 #35 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 #36 0x00007ffff5b561e6 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib/libQtGui.so.4 #37 0x00007ffff5b5960b in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #38 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #39 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #40 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #41 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #42 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #43 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #44 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #45 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 ---Type <return> to continue, or q <return> to quit--- #46 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #47 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #48 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #49 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #50 0x00007ffff5b598d0 in QWidgetPrivate::prepareToRender(QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #51 0x00007ffff5b59a56 in QWidgetPrivate::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>, bool) () from /usr/lib/libQtGui.so.4 #52 0x00007ffff5b59e99 in QWidget::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #53 0x00007ffff68e60db in ?? () from /usr/lib/libkdeui.so.5 #54 0x00007ffff68e6241 in KMessageWidget::resizeEvent(QResizeEvent*) () from /usr/lib/libkdeui.so.5 #55 0x00007ffff5b5bc15 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 #56 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 #57 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #58 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #59 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 #60 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 #61 0x00007ffff5b561e6 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib/libQtGui.so.4 #62 0x00007ffff5b5960b in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #63 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #64 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #65 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #66 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #67 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #68 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 ---Type <return> to continue, or q <return> to quit--- #69 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #70 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #71 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #72 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #73 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #74 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #75 0x00007ffff5b598d0 in QWidgetPrivate::prepareToRender(QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #76 0x00007ffff5b59a56 in QWidgetPrivate::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>, bool) () from /usr/lib/libQtGui.so.4 #77 0x00007ffff5b59e99 in QWidget::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 #78 0x00007ffff68e60db in ?? () from /usr/lib/libkdeui.so.5 #79 0x00007ffff68e6241 in KMessageWidget::resizeEvent(QResizeEvent*) () from /usr/lib/libkdeui.so.5 #80 0x00007ffff5b5bc15 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 #81 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 #82 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #83 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 #84 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 #85 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 #86 0x00007ffff5b561e6 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib/libQtGui.so.4 #87 0x00007ffff5b5960b in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #88 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #89 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #90 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 #91 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 ... (gdb) up 1000000 #66373 0x00000000004008ee in main (argc=4, argv=0x7fffffffd1f8) at /home/milian/projects/.build/kde4/kate/kate/app/kate_dummy.cpp:3 3 int main(int argc, char* argv[]) { return kdemain(argc,argv); } (gdb) dow #66372 0x00007ffff7ff458a in kdemain (argc=4, argv=0x7fffffffd1f8) at /home/milian/projects/kde4/kate/kate/app/katemain.cpp:380 380 return app.exec(); (gdb) #66371 0x00007ffff4ea0328 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4 (gdb) #66370 0x00007ffff4e9b688 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 (gdb) #66369 0x00007ffff4e9b3ff in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 (gdb) #66368 0x00007ffff5bac69e in ?? () from /usr/lib/libQtGui.so.4 (gdb) #66367 0x00007ffff4ecab66 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4 (gdb) #66366 0x00007ffff065ec34 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 (gdb) #66365 0x00007ffff065eb78 in ?? () from /usr/lib/libglib-2.0.so.0 (gdb) #66364 0x00007ffff065e845 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 (gdb) #66363 0x00007ffff4eca9d3 in ?? () from /usr/lib/libQtCore.so.4 (gdb) #66362 0x00007ffff4ea0011 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQtCore.so.4 (gdb) #66361 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 (gdb) #66360 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 (gdb) #66359 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66358 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66357 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66356 0x00007ffff5b5b18a in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66355 0x00007ffff4eb106e in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4 (gdb) #66354 0x00007ffff68e6d50 in KMessageWidget::animatedShow() () from /usr/lib/libkdeui.so.5 (gdb) #66353 0x00007ffff68e60db in ?? () from /usr/lib/libkdeui.so.5 (gdb) #66352 0x00007ffff5b59e99 in QWidget::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 (gdb) #66351 0x00007ffff5b59a56 in QWidgetPrivate::render(QPaintDevice*, QPoint const&, QRegion const&, QFlags<QWidget::RenderFlag>, bool) () from /usr/lib/libQtGui.so.4 (gdb) #66350 0x00007ffff5b598d0 in QWidgetPrivate::prepareToRender(QRegion const&, QFlags<QWidget::RenderFlag>) () from /usr/lib/libQtGui.so.4 (gdb) #66349 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66348 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66347 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66346 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66345 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66344 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66343 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66342 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66341 0x00007ffff5b59678 in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66340 0x00007ffff5b596ba in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66339 0x00007ffff5b596ba in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66338 0x00007ffff5b596ba in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66337 0x00007ffff5b5960b in QWidgetPrivate::activateChildLayoutsRecursively() () from /usr/lib/libQtGui.so.4 (gdb) #66336 0x00007ffff5b561e6 in QWidgetPrivate::sendPendingMoveAndResizeEvents(bool, bool) () from /usr/lib/libQtGui.so.4 (gdb) #66335 0x00007ffff4e9c6ae in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4 (gdb) #66334 0x00007ffff6829df6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5 (gdb) #66333 0x00007ffff5b1060a in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66332 0x00007ffff5b0c18c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66331 0x00007ffff5f06d36 in QFrame::event(QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66330 0x00007ffff5b5bc15 in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4 (gdb) #66329 0x00007ffff68e6241 in KMessageWidget::resizeEvent(QResizeEvent*) () from /usr/lib/libkdeui.so.5 (gdb) #66328 0x00007ffff68e60db in ?? () from /usr/lib/libkdeui.so.5 (gdb) Expected Results: no crash I think it's related to not yet visible KMessageWidget's, at least I could trigger it in KDevelop that way, i.e. something similar to (the below is untested): QWidget* w = new QWidget; QHBoxLayout* l = new QHBoxLayout; KMessageWidget* msg = new KMessageWidget; l->addWidget(msg); w->setLayout(l); // don't call w->show() msg->animatedShow();
CC'ing Aurelien, afaik you wrote this?
*** This bug has been marked as a duplicate of bug 311336 ***