Summary: | Umbrello crashed when changing the Package of a class | ||
---|---|---|---|
Product: | [Applications] umbrello | Reporter: | Marco CInus <marco> |
Component: | general | Assignee: | Umbrello Development Group <umbrello-devel> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | igelbox, jbpagador, martin.kampas+kdebugs, ohommes, ralf.habacker, underline, vpottier |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 4.9.0 | |
Attachments: | New crash information added by DrKonqi |
Description
Marco CInus
2011-03-14 15:29:19 UTC
Duplicate of bug 242142? Created attachment 63399 [details]
New crash information added by DrKonqi
umbrello (2.6.2) on KDE Platform 4.6.2 (4.6.2) using Qt 4.7.2
- What I was doing when the application crashed:
1. Clicked on a class which was not on the diagram but in the UML Model tree view.
2. Opened its properties dialog with right-click.
3. Copied and pasted the package name for the class. It was empty before.
4. Clicked OK.
5. Application crashed.
-- Backtrace (Reduced):
#8 0x083abf94 in UMLListView::popupMenuSel (this=0x929a520, action=0x939c030) at ../../../umbrello/umbrello/umllistview.cpp:589
#9 0x083b3a7c in UMLListView::qt_metacall (this=0x929a520, _c=QMetaObject::InvokeMetaMethod, _id=9, _a=0xbf9ace78) at ./umllistview.moc:111
[...]
#12 0x01759083 in QMenu::triggered (this=0x93a27f8, _t1=0x939c030) at .moc/release-shared/moc_qmenu.cpp:164
#13 0x0175a0aa in QMenuPrivate::_q_actionTriggered (this=0x9556c18) at widgets/qmenu.cpp:1111
#14 0x0175f30e in QMenu::qt_metacall (this=0x93a27f8, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0xbf9ad048) at .moc/release-shared/moc_qmenu.cpp:105
same issue her (In reply to comment #2) could be reproduced on windows using msvc at least on windows the problem occurs by an overwritten UMLListViewItem object. in the current item is requested. void UMLListView::popupMenuSel(QAction* action) { UMLListViewItem * temp = (UMLListViewItem*)currentItem(); later the property dialog is displayed: if (Model_Utils::typeIsCanvasWidget(lvt)) { object->showProperties(ClassPropDlg::page_gen); after calling dlg->exec() bool UMLObject::showProperties(int page, bool assoc) { Q_UNUSED(page); DocWindow *docwindow = UMLApp::app()->docWindow(); docwindow->updateDocumentation(false); QPointer<ClassPropDlg> dlg = new ClassPropDlg((QWidget*)UMLApp::app(), this, assoc); bool modified = false; !!! if (dlg->exec()) { then at least the following object members of 'temp' are overwritten + m_label {d=0x00000000 } QString + m_comap {d=0xfdfdfdfd e=0xfdfdfdfd } QMap<UMLClassifierListItem *,UMLListViewItem *> Here is was happens behind the scene Qt3Supportd4.dll!Q3ListViewItem::~Q3ListViewItem() Zeile 913 C++ umbrello.exe!UMLListViewItem::~UMLListViewItem() Zeile 175 + 0x45 Bytes C++ umbrello.exe!UMLListViewItem::`scalar deleting destructor'() + 0x16 Bytes C++ > umbrello.exe!UMLListView::moveObject(std::basic_string<char,std::char_traits<char>,std::allocator<char> > srcId, UMLListViewItem::ListViewType srcType, UMLListViewItem * newParent) Zeile 1656 + 0x34 Bytes C++ umbrello.exe!Model_Utils::treeViewMoveObjectTo(UMLObject * container, UMLObject * object) Zeile 323 C++ umbrello.exe!ClassGenPage::updateObject() Zeile 434 + 0x10 Bytes C++ umbrello.exe!ClassPropDlg::slotApply() Zeile 170 C++ umbrello.exe!ClassPropDlg::slotOk() Zeile 159 C++ umbrello.exe!ClassPropDlg::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Zeile 73 + 0x8 Bytes C++ QtCored4.dll!QMetaObject::metacall(QObject * object, QMetaObject::Call cl, int idx, void * * argv) Zeile 238 C++ QtCored4.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Zeile 3280 + 0x27 Bytes C++ kdeui.dll!KDialog::okClicked() Zeile 258 + 0x15 Bytes C++ kdeui.dll!KDialog::slotButtonClicked(int button) Zeile 885 C++ kdeui.dll!KDialog::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Zeile 190 + 0x1b Bytes C++ kdeui.dll!KPageDialog::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Zeile 70 + 0x14 Bytes C++ umbrello.exe!ClassPropDlg::qt_metacall(QMetaObject::Call _c, int _id, void * * _a) Zeile 68 + 0x17 Bytes C++ After pressing "ok" in the property dialog the widget is going to be moved to the other package, which is handled in > umbrello.exe!UMLListView::moveObject(std::basic_string<char,std::char_traits<char>,std::allocator<char> > srcId, In fact a new widget is created and the old one deleted case UMLListViewItem::lvt_Datatype: if (newParentType == UMLListViewItem::lvt_Logical_Folder || newParentType == UMLListViewItem::lvt_Datatype_Folder || newParentType == UMLListViewItem::lvt_Logical_View || newParentType == UMLListViewItem::lvt_Class || newParentType == UMLListViewItem::lvt_Interface || newParentType == UMLListViewItem::lvt_Package) { newItem = move->deepCopy(newParent); if (m_doc->loading()) // deletion is not safe while loading move->setVisible(false); // (the <listview> XMI may be corrupted) else ! delete move; which means that 'temp' the current list view item is destroyed. *** Bug 242142 has been marked as a duplicate of this bug. *** *** Bug 298728 has been marked as a duplicate of this bug. *** apply fixed bug from 4.9.0 changelog *** Bug 188300 has been marked as a duplicate of this bug. *** *** Bug 273594 has been marked as a duplicate of this bug. *** |