Version: 1.2-alpha (using KDE 3.1.9) Compiler: gcc version 3.2.1 (Mandrake Linux 9.1 3.2.1-7mdk) OS: Linux (i686) release 2.4.21-0.1mdk I get a reproducable crash trying to load a file that has been created with this same version (1.2-alpha, KDE 3.1.91, CVS >=20030907) of umbrello. I have included a backtrace below. Deleting the tag included below from the xmi fixes the problem, I don't know if it is enough information in isolation, I can provide the complete file if needed. Hope this helps, Rob ==============Offending XML============== <UML:Association abstract="0" assoctype="502" changeabilitya="900" changeabilityb="900" doca="" docb="" documentation="" multia="" multib="" name="" namea="" nameb="" package="" rolea="34" roleb="27" scope="200" static="0" stereotype="" visibilitya="200" visibilityb="200" xmi.id="39" ></UML:Association> ============End Offending XML================ =================Backtrace================= Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 16384 (LWP 5134)] 0x412664bf in operator new(unsigned) () from /usr/lib/libstdc++.so.5 (gdb) bt #0 0x412664bf in operator new(unsigned) () from /usr/lib/libstdc++.so.5 #1 0x40e9c7c2 in QValueListPrivate<QGListIterator*>::insert(QValueListIterator<QGListIterator*>, QGListIterator* const&) () from /opt/kde3.2-alpha1/lib/libqt-mt.so.3 #2 0x40e9bf10 in QGListIterator::QGListIterator(QGList const&) () from /opt/kde3.2-alpha1/lib/libqt-mt.so.3 #3 0x0815ffe0 in UMLWidget::operator==(UMLWidget const&) () #4 0x080d3a84 in AssociationWidget::operator==(AssociationWidget&) () #5 0x08160029 in UMLWidget::operator==(UMLWidget const&) () #6 0x080d3a84 in AssociationWidget::operator==(AssociationWidget&) () etc.... ===============End Backtrace===================
Looks like the same issue reported by David Faure earlier on.. -- The exact lines are: #19 0x080d412f in AssociationWidget::operator==(AssociationWidget&) (this=0x8475b60, Other=@0x8474ae8) at /mnt/devel/kde/kdecvs/kdesdk/umbrello/umbrello/ associationwidget.cpp:171 171 } else if ( !(*m_pName == *(Other.m_pName)) ) #18 0x08163b23 in UMLWidget::operator==(UMLWidget const&) (this=0x8476250, other=@0x84755d0) at /mnt/devel/kde/kdecvs/kdesdk/umbrello/umbrello/umlwidget.cpp:169 169 if(!(*assoc == *assoc2)) { That one is inside a loop that looks at all associations. This feels wrong to me. If you imagine your classes like a tree, equality comparison should only go "down" the tree, never up. Here it looks like it goes down in AssociationWidget, but it goes up in UMLWidget, so it loops forever, going from one to the other. (To reproduce: well, I'm simply loading a .xmi file with a collaboration diagram in it, it crashes before anything appears)
I'm not sure, my xmi had only a use case diagram and was otherwise empty. But if there is a way to trigger this in a Use Case digram it could be.
Fixed in CVS. Please verify.
Yup, code in CVS works for me. kde-3.2-alpha1 + CVS kdesdk on Mandrake 9.1 I'm wondering for a next time: should I be the one to mark the bug as resolved? Thanks for the fix, and good luck, Rob PS: I had to add a couple of missing headers to umbrello/dialogs/ codevieweroptionspage.cpp and manually make the dialogs directory earlier in the build cycle to get it to compile.
*** Bug has been marked as fixed ***.