Summary: | Crash on exit | ||
---|---|---|---|
Product: | [Applications] umbrello | Reporter: | Oliver Kellogg <okellogg> |
Component: | general | Assignee: | Oliver Kellogg <okellogg> |
Status: | REOPENED --- | ||
Severity: | normal | CC: | code |
Priority: | NOR | ||
Version: | Git | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Linux | ||
Latest Commit: | https://invent.kde.org/sdk/umbrello/commit/03b0d2f64495a016dda1998a8f53c706bf4312bb | Version Fixed In: | 2.37.70 (KDE releases 23.03.70) |
Description
Oliver Kellogg
2022-12-04 11:39:01 UTC
Git commit 03b0d2f64495a016dda1998a8f53c706bf4312bb by Oliver Kellogg. Committed on 04/12/2022 at 11:49. Pushed by okellogg into branch 'master'. umbrello/umlwidgets/umlwidget.cpp - In function removeAssoc, if changesShape() is true then refrain from calling updateGeometry() if UMLApp::app()->shuttingDown() is true. Reason: Otherwise a signal is propagated which leads to the crash. FIXED-IN: 2.37.70 (KDE releases 23.03.70) M +1 -1 umbrello/umlwidgets/umlwidget.cpp https://invent.kde.org/sdk/umbrello/commit/03b0d2f64495a016dda1998a8f53c706bf4312bb Wouldn't it be better to create UMLApp as a local variable, i.e. on the stack, in the main() function? Also, it seems that there is this at line 173: QPointer<UMLApp> uml; Doesn't this handle deletion of 'uml' automatically? -- (In reply to Oliver Kellogg from comment #1) > Git commit 03b0d2f64495a016dda1998a8f53c706bf4312bb by Oliver Kellogg. > Committed on 04/12/2022 at 11:49. > Pushed by okellogg into branch 'master'. > > umbrello/umlwidgets/umlwidget.cpp > - In function removeAssoc, if changesShape() is true then refrain from > calling updateGeometry() if UMLApp::app()->shuttingDown() is true. > Reason: Otherwise a signal is propagated which leads to the crash. > FIXED-IN: 2.37.70 (KDE releases 23.03.70) > > M +1 -1 umbrello/umlwidgets/umlwidget.cpp > > https://invent.kde.org/sdk/umbrello/commit/ > 03b0d2f64495a016dda1998a8f53c706bf4312bb Git commit bae76adb1a9be5c9535fdc4e7e5b10b7b8558566 by Oliver Kellogg. Committed on 04/12/2022 at 16:15. Pushed by okellogg into branch 'master'. (In reply to Robert Hairgrove from comment #2) > Wouldn't it be better to create UMLApp as a local variable, i.e. > on the stack, in the main() function? To be investigated separately. > Also, it seems that there is this at line 173: > QPointer<UMLApp> uml; > > Doesn't this handle deletion of 'uml' automatically? Absolutely right, my oversight. Thanks. umbrello/main.cpp - In main program remove the line `delete uml`. M +0 -1 umbrello/main.cpp https://invent.kde.org/sdk/umbrello/commit/bae76adb1a9be5c9535fdc4e7e5b10b7b8558566 Reopening this was the right thing to do - as confirmed by further SEGV; this time - without using command line options - loading an XMI file (UmbrelloArchitecture.xmi) - doing some editing - exiting without save (i.e. discard changes) #0 in QListData::size (this=0x30) at /usr/include/qt5/QtCore/qlist.h:115 #1 in QList<QTreeWidgetItem*>::count (this=0x30) at /usr/include/qt5/QtCore/qlist.h:359 #2 in QTreeWidgetItem::childCount (this=0x0) at /usr/include/qt5/QtWidgets/qtreewidget.h:193 #3 in UMLListView::findView (this=0x1421b90, v=0x23f8390) at /umbrello/master/umbrello/umllistview.cpp:1382 #4 in UMLApp::setCurrentView (this=0xd3f380, view=0x23f8390, updateTreeView=true) at /umbrello/master/umbrello/uml.cpp:3334 #5 in UMLDoc::changeCurrentView (this=0x10f9aa0, id="JBFSUyhmy1cS") at /umbrello/master/umbrello/umldoc.cpp:1840 #6 in UMLApp::slotTabChanged (this=0xd3f380, index=0) at /umbrello/master/umbrello/uml.cpp:3382 #7 in UMLApp::qt_static_metacall (_o=0xd3f380, _c=QMetaObject::InvokeMetaMethod, _id=81, _a=0x7fffffffb470) at /umbrello/master/build/umbrello/libumbrello_autogen/EWIEGA46WW/moc_uml.cpp:564 #8 in doActivate<false> (sender=0x1349e10, signal_index=7, argv=0x7fffffffb470) at kernel/qobject.cpp:3931 #9 in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x7ffff64cb540 <QTabWidget::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffb470) at kernel/qobject.cpp:3979 #10 in QTabWidget::currentChanged (this=<optimized out>, _t1=<optimized out>) at .moc/moc_qtabwidget.cpp:326 #11 in doActivate<false> (sender=0x1352aa0, signal_index=7, argv=0x7fffffffb570) at kernel/qobject.cpp:3931 #12 in QMetaObject::activate (sender=sender@entry=0x1352aa0, m=m@entry=0x7ffff64c9fa0 <QTabBar::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffb570) at kernel/qobject.cpp:3979 #13 in QTabBar::currentChanged (this=this@entry=0x1352aa0, _t1=<optimized out>) at .moc/moc_qtabbar.cpp:338 #14 in QTabBar::setCurrentIndex (this=this@entry=0x1352aa0, index=<optimized out>) at widgets/qtabbar.cpp:1457 #15 in QTabBar::removeTab (this=0x1352aa0, index=<optimized out>, index@entry=0) at widgets/qtabbar.cpp:1108 #16 in QTabWidgetPrivate::_q_removeTab (index=0, this=<optimized out>) at widgets/qtabwidget.cpp:802 #17 QTabWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at .moc/moc_qtabwidget.cpp:178 #18 in doActivate<false> (sender=0x1351ce0, signal_index=8, argv=0x7fffffffb710) at kernel/qobject.cpp:3931 #19 in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x7ffff64c9980 <QStackedWidget::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7fffffffb710) at kernel/qobject.cpp:3979 #20 in QStackedWidget::widgetRemoved (this=<optimized out>, _t1=<optimized out>) at .moc/moc_qstackedwidget.cpp:226 #21 in doActivate<false> (sender=0x1351bf0, signal_index=3, argv=0x7fffffffb810) at kernel/qobject.cpp:3931 #22 in QMetaObject::activate (sender=sender@entry=0x1351bf0, m=m@entry=0x7ffff64b9fe0 <QStackedLayout::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffffffb810) at kernel/qobject.cpp:3979 #23 in QStackedLayout::widgetRemoved (this=this@entry=0x1351bf0, _t1=<optimized out>, _t1@entry=0) at .moc/moc_qstackedlayout.cpp:220 #24 in QStackedLayout::takeAt (this=0x1351bf0, index=0) at kernel/qstackedlayout.cpp:282 #25 in removeWidgetRecursively (li=<optimized out>, w=0x23137a0) at kernel/qlayout.cpp:573 #26 in QLayout::widgetEvent (this=<optimized out>, e=e@entry=0x7fffffffb960) at kernel/qlayout.cpp:629 #27 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x1351ce0, e=0x7fffffffb960) at kernel/qapplication.cpp:3626 #28 in QCoreApplication::notifyInternal2 (receiver=0x1351ce0, event=0x7fffffffb960) at kernel/qcoreapplication.cpp:1064 #29 in QObjectPrivate::setParent_helper (this=0x231a9c0, o=0x0) at kernel/qobject.cpp:2182 #30 in QObject::~QObject (this=<optimized out>, __in_chrg=<optimized out>) at kernel/qobject.cpp:1126 #31 in UMLView::~UMLView (this=0x23137a0, __in_chrg=<optimized out>) at /umbrello/master/umbrello/umlview.cpp:46 #32 in UMLView::~UMLView (this=0x23137a0, __in_chrg=<optimized out>) at /umbrello/master/umbrello/umlview.cpp:46 #33 in UMLDoc::removeView (this=0x10f9aa0, view=0x23137a0, enforceCurrentView=false) at /umbrello/master/umbrello/umldoc.cpp:341 #34 in UMLFolder::removeAllViews (this=0x1044300) at /umbrello/master/umbrello/umlmodel/folder.cpp:242 #35 in UMLDoc::removeAllViews (this=0x10f9aa0) at /umbrello/master/umbrello/umldoc.cpp:2986 #36 in UMLDoc::closeDocument (this=0x10f9aa0) at /umbrello/master/umbrello/umldoc.cpp:463 #37 in UMLDoc::saveModified (this=0x10f9aa0) at /umbrello/master/umbrello/umldoc.cpp:421 #38 in UMLApp::slotFileQuit (this=0xd3f380) at /umbrello/master/umbrello/uml.cpp:1668 #39 in UMLApp::qt_static_metacall (_o=0xd3f380, _c=QMetaObject::InvokeMetaMethod, _id=13, _a=0x7fffffffbeb0) at /umbrello/master/build/umbrello/libumbrello_autogen/EWIEGA46WW/moc_uml.cpp:496 #40 in doActivate<false> (sender=0x10ae4e0, signal_index=4, argv=0x7fffffffbeb0) at kernel/qobject.cpp:3931 #41 in QMetaObject::activate (sender=sender@entry=0x10ae4e0, m=m@entry=0x7ffff64b8d20 <QAction::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7fffffffbeb0) at kernel/qobject.cpp:3979 #42 in QAction::triggered (this=this@entry=0x10ae4e0, _t1=<optimized out>) at .moc/moc_qaction.cpp:376 #43 in QAction::activate (this=0x10ae4e0, event=<optimized out>) at kernel/qaction.cpp:1161 #44 in QMenuPrivate::activateCausedStack (this=this@entry=0x10ef9c0, causedStack={...}, action=action@entry=0x10ae4e0, action_e=action_e@entry=QAction::Trigger, self=self@entry=true) at widgets/qmenu.cpp:1384 #45 in QMenuPrivate::activateAction (this=0x10ef9c0, action=0x10ae4e0, action_e=QAction::Trigger, self=<optimized out>) at widgets/qmenu.cpp:1461 #46 in QWidget::event (this=0x10c7420, event=0x7fffffffc490) at kernel/qwidget.cpp:9043 #47 in QApplicationPrivate::notify_helper (this=this@entry=0xc4d6b0, receiver=receiver@entry=0x10c7420, e=e@entry=0x7fffffffc490) at kernel/qapplication.cpp:3637 #48 in QApplication::notify (this=<optimized out>, receiver=0x10c7420, e=<optimized out>) at kernel/qapplication.cpp:3081 #49 in QCoreApplication::notifyInternal2 (receiver=0x10c7420, event=0x7fffffffc490) at kernel/qcoreapplication.cpp:1064 #50 in QApplicationPrivate::sendMouseEvent (receiver=0x10c7420, event=event@entry=0x7fffffffc490, alienWidget=<optimized out>, nativeWidget=0x10c7420, buttonDown=buttonDown@entry=<qt_button_down>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false) at kernel/qapplication.cpp:2619 #51 in QWidgetWindow::handleMouseEvent (this=0x11b98d0, event=0x7fffffffc740) at kernel/qwidgetwindow.cpp:580 #52 in QWidgetWindow::event (this=0x11b98d0, event=0x7fffffffc740) at kernel/qwidgetwindow.cpp:300 #53 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x11b98d0, e=0x7fffffffc740) at kernel/qapplication.cpp:3637 #54 in QCoreApplication::notifyInternal2 (receiver=0x11b98d0, event=0x7fffffffc740) at kernel/qcoreapplication.cpp:1064 #55 in QGuiApplicationPrivate::processMouseEvent (e=0x1518ff0) at kernel/qguiapplication.cpp:2285 #56 in QWindowSystemInterface::sendWindowSystemEvents (flags=flags@entry=...) at kernel/qwindowsysteminterface.cpp:1169 #57 in xcbSourceDispatch (source=<optimized out>) at qxcbeventdispatcher.cpp:105 #58 in g_main_dispatch (context=0x7fffec005010) at ../glib/gmain.c:3444 #59 g_main_context_dispatch (context=context@entry=0x7fffec005010) at ../glib/gmain.c:4162 #60 in g_main_context_iterate (context=context@entry=0x7fffec005010, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4238 #61 in g_main_context_iteration (context=0x7fffec005010, may_block=1) at ../glib/gmain.c:4303 #62 in QEventDispatcherGlib::processEvents (this=0xd22f20, flags=...) at kernel/qeventdispatcher_glib.cpp:423 #63 in QEventLoop::exec (this=this@entry=0x7fffffffca70, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #64 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #65 in main (argc=1, argv=0x7fffffffd188) at /umbrello/master/umbrello/main.cpp:340 Git commit b3bd2bf9f83cbc017dbb532e0724f8505eb567ed by Oliver Kellogg. Committed on 27/12/2022 at 05:41. Pushed by okellogg into branch 'master'. Address https://bugs.kde.org/show_bug.cgi?id=462627#c4 : In umbrello/uml.cpp function slotTabChanged do not call m_doc->changeCurrentView() if m_doc->closing() returns true. M +1 -1 umbrello/uml.cpp https://invent.kde.org/sdk/umbrello/commit/b3bd2bf9f83cbc017dbb532e0724f8505eb567ed |