Bug 98369 - hangs if a containment connection is drawn between a package and an interface, if there already exists one in the other direction
Summary: hangs if a containment connection is drawn between a package and an interface...
Status: RESOLVED FIXED
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR crash
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-02-01 22:20 UTC by Joseph Wenninger
Modified: 2005-10-15 20:50 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joseph Wenninger 2005-02-01 22:20:04 UTC
Version:           1.3.92 (using KDE 3.3.91 (beta1), compiled sources)
Compiler:          gcc version 3.4.3 20050110 (Gentoo Linux 3.4.3.20050110, ssp-3.4.3.20050110-0, pie-8.7.7)
OS:                Linux (x86_64) release 2.6.9-gentoo-r1

hangs if a containment connection is drawn between a package and an interface, if there already exists one in the other direction
Comment 1 Jonathan Riddell 2005-02-14 18:02:24 UTC
Confirmed: new class diagram, add 2 classes, make a containment association from first to second, make a containment association from second to first, hangs.  Backtrace:

#0  0xb712b0a9 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#1  0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#2  0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#3  0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
...etc...
#100 0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#101 0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#102 0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#103 0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#104 0xb712b0a8 in QListViewItem::depth () from /usr/lib/libqt-mt.so.3
#105 0xb7130409 in QListView::widthChanged () from /usr/lib/libqt-mt.so.3
#106 0xb712b2db in QListViewItem::widthChanged () from /usr/lib/libqt-mt.so.3
#107 0xb7124910 in QListViewItem::setup () from /usr/lib/libqt-mt.so.3
#108 0xb712522a in QListViewItem::setPixmap () from /usr/lib/libqt-mt.so.3
#109 0x081b575e in UMLListViewItem::updateObject (this=0x85910d0)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:267
#110 0x081b4805 in UMLListViewItem (this=0x85910d0, parent=0x8590f68, name=@0xbffdea70, t=lvt_Class,
    o=0x861ef70) at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:79
#111 0x081b6d1c in UMLListViewItem::deepCopy (this=0x8590e00, newParent=0x8590f68)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:575
#112 0x081b6d9e in UMLListViewItem::deepCopy (this=0x8590c98, newParent=0x8590e00)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:580
...etc...
#1281 0x081b6d9e in UMLListViewItem::deepCopy (this=0x84e8108, newParent=0x85b5230)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:580
#1282 0x081b6d9e in UMLListViewItem::deepCopy (this=0x84e8400, newParent=0x84e8108)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistviewitem.cpp:580
#1283 0x081ac6ac in UMLListView::moveObject (this=0x84a8ce8, srcId=
        {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<No data fields>}, _M_p = 0x8373f2c "12"}, static _S_empty_rep_storage = {0, 0, 0, 0}}, srcType=lvt_Class, newParent=0x84e8108)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umllistview.cpp:1146
#1284 0x081c683b in UMLView::setAssoc (this=0x84db490, pWidget=0x85ebb80)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umlview.cpp:2052
#1285 0x081d1a78 in UMLWidget::mouseReleaseEvent (this=0x85ebb80, me=0x86fe988)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umlwidget.cpp:366
#1286 0x08184a86 in ToolBarState::mouseRelease (this=0x85b5760, ome=0xbfffecc0)
    at /home/jr/devel/kdesdk/umbrello/umbrello/toolbarstate.cpp:79
#1287 0x08185d78 in ToolBarStateAssociation::mouseRelease (this=0x85b5760, ome=0xbfffecc0)
    at /home/jr/devel/kdesdk/umbrello/umbrello/toolbarstateassociation.cpp:53
#1288 0x081bf0f5 in UMLView::contentsMouseReleaseEvent (this=0x84db490, ome=0xbfffecc0)
    at /home/jr/devel/kdesdk/umbrello/umbrello/umlview.cpp:376
#1289 0xb715cf02 in QScrollView::viewportMouseReleaseEvent () from /usr/lib/libqt-mt.so.3
#1290 0xb715c7b9 in QScrollView::eventFilter () from /usr/lib/libqt-mt.so.3
#1291 0xb7044e4e in QObject::activate_filters () from /usr/lib/libqt-mt.so.3
#1292 0xb7044d7c in QObject::event () from /usr/lib/libqt-mt.so.3
#1293 0xb707d5ff in QWidget::event () from /usr/lib/libqt-mt.so.3
#1294 0xb6feabbf in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3
#1295 0xb6fea2b4 in QApplication::notify () from /usr/lib/libqt-mt.so.3
#1296 0xb76803c0 in KApplication::notify (this=0xbffff750, receiver=0x84db9e8, event=0xbffff1b0)
    at /home/jr/devel/kdelibs/kdecore/kapplication.cpp:549
#1297 0xb6f7f630 in QETWidget::translateMouseEvent () from /usr/lib/libqt-mt.so.3
#1298 0xb6f7d2be in QApplication::x11ProcessEvent () from /usr/lib/libqt-mt.so.3
#1299 0xb6f94194 in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3
#1300 0xb6ffcf18 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3
#1301 0xb6ffcdc8 in QEventLoop::exec () from /usr/lib/libqt-mt.so.3
#1302 0xb6feae11 in QApplication::exec () from /usr/lib/libqt-mt.so.3
#1303 0x0816a5f1 in main (argc=1, argv=0xbffff8f4) at /home/jr/devel/kdesdk/umbrello/umbrello/main.cpp:91
Comment 2 Oliver Kellogg 2005-10-15 20:50:42 UTC
SVN commit 470948 by okellogg:

allowAssociation(Association_Type,UMLWidget*,UMLWidget*,bool):
 Prevent mutual compositions and containments.
BUG:98369


 M  +4 -4      assocrules.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/umbrello/assocrules.cpp #470947:470948
@@ -138,15 +138,15 @@
     case at_Coll_Message:
     case at_Aggregation:
     case at_Relationship:
-    case at_Composition:
-    case at_Containment:
-        return true;//doesn't matter whats already connected to widget
+        return true;  // doesn't matter what's already connected to widget
         break;
 
+    case at_Composition:   // can't have mutual composition
+    case at_Containment:   // can't have mutual containment
     case at_Generalization://can have many sub/super types but can't sup/sub each
         while( ( assoc = it.current() ) ) {
             if( ( widgetA == assoc -> getWidget(A) || widgetA == assoc -> getWidget(B) )
-                    && assoc -> getAssocType() == at_Generalization )
+                    && assoc->getAssocType() == assocType )
                 return false;
             ++it;
         }