[Uml-devel] branches/KDE/3.5/kdesdk/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Mon Oct 23 19:11:49 UTC 2006


SVN commit 598502 by okellogg:

removeAllAssociations(): Do not increment the iterator when positioned on an
 association. Remove the association from m_List unconditionally.
BUG:135479


 M  +4 -0      ChangeLog  
 M  +1 -1      VERSION  
 M  +7 -6      umbrello/umlcanvasobject.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #598501:598502
@@ -1,3 +1,7 @@
+Version 1.5.51
+* This is an interim release that fixes a serious regression in version 1.5.5
+  which is detailed at http://bugs.kde.org/135749 (Crash when opening a document)
+
 Version 1.5.5
 
 * PHP5 generator creates stub methods for all interfaces a class implements (C. Brunsdon)
--- branches/KDE/3.5/kdesdk/umbrello/VERSION #598501:598502
@@ -1 +1 @@
-1.5.5
+1.5.51
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/umlcanvasobject.cpp #598501:598502
@@ -95,17 +95,18 @@
 
 void UMLCanvasObject::removeAllAssociations() {
     UMLObject *o;
-    for (UMLObjectListIt oit(m_List); (o = oit.current()) != NULL; ++oit) {
-        if (o->getBaseType() != Uml::ot_Association)
+    for (UMLObjectListIt oit(m_List); (o = oit.current()) != NULL; ) {
+        if (o->getBaseType() != Uml::ot_Association) {
+            ++oit;
             continue;
+        }
         UMLAssociation *assoc = static_cast<UMLAssociation*>(o);
         //umldoc->slotRemoveUMLObject(assoc);
         UMLObject* objA = assoc->getObject(Uml::A);
         UMLObject* objB = assoc->getObject(Uml::B);
         UMLCanvasObject *roleAObj = dynamic_cast<UMLCanvasObject*>(objA);
         if (roleAObj) {
-            if (roleAObj->removeAssociation(assoc) < 0)
-                m_List.remove(assoc);
+            roleAObj->removeAssociation(assoc);
         } else if (objA)
             kdDebug() << "UMLCanvasObject::removeAllAssociations(" << m_Name
                 << "): objA " << objA->getName() << " is not a UMLCanvasObject"
@@ -115,8 +116,7 @@
                 << "): objA is NULL" << endl;
         UMLCanvasObject *roleBObj = dynamic_cast<UMLCanvasObject*>(objB);
         if (roleBObj) {
-            if (roleBObj->removeAssociation(assoc) < 0)
-                m_List.remove(assoc);
+            roleBObj->removeAssociation(assoc);
         } else if (objB)
             kdDebug() << "UMLCanvasObject::removeAllAssociations(" << m_Name
                 << "): objB " << objB->getName() << " is not a UMLCanvasObject"
@@ -124,6 +124,7 @@
         else
             kdDebug() << "UMLCanvasObject::removeAllAssociations(" << m_Name
                 << "): objB is NULL" << endl;
+        m_List.remove(assoc);
         //delete assoc;  should not do this here, we are only a CLIENT of the assoc
     }
 }




More information about the umbrello-devel mailing list