[Kst] [Bug 88357] crash when changing curve name while viewing live data

Andrew Walker arwalker at sumusltd.com
Mon Aug 30 21:24:41 CEST 2004


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
      
http://bugs.kde.org/show_bug.cgi?id=88357      
arwalker sumusltd com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From arwalker sumusltd com  2004-08-30 21:24 -------
CVS commit by arwalker: 

This occurs as the data manager may be requested to updateContents( ... ) before update( ... ). If this happens then a crash may result if any object's name in the data manager had been changed in the meantime. If the object name (part of the KstObjectItem) can not be found then the code assert's (and so crashes).

The solution is not to assert, but instead check that the object corresponding to the name was found. 

CCMAIL: 88357-done bugs kde org


  M +65 -62    kstdatamanager_i.cpp   1.81


--- kdeextragear-2/kst/kst/kstdatamanager_i.cpp  #1.80:1.81
 @ -93,7 +93,7  @ void KstObjectItem::update(bool recursiv
       {
         KstVectorPtr px = *KST::vectorList.findTag(_name);
-        assert(px.data());
-        assert(dynamic_cast<KstRVector*>(px.data()));
+        if (px) {
         KstRVectorPtr x = static_cast<KstRVector*>(px.data());
+          if (x) {
         x->readLock();
         //
 @ -110,4 +110,6  @ void KstObjectItem::update(bool recursiv
         _removable = x->getUsage() == 2;
         x->readUnlock();
+          }
+        }
         break;
       }
 @ -115,5 +117,5  @ void KstObjectItem::update(bool recursiv
       {
         KstVectorPtr x = *KST::vectorList.findTag(_name);
-        assert(x.data());
+        if (x) {
         x->readLock();
         //
 @ -126,4 +128,5  @ void KstObjectItem::update(bool recursiv
         x->readUnlock();
         _removable = false;
+        }
         break;
       }
 @ -131,5 +134,5  @ void KstObjectItem::update(bool recursiv
       {
         KstDataObjectPtr x = *KST::dataObjectList.findTag(_name);
-        assert(x.data());
+        if (x) {
         x->readLock();
         //
 @ -154,6 +157,5  @ void KstObjectItem::update(bool recursiv
 
           for (KstVectorMap::Iterator p = x->outputVectors().begin();
-              p != x->outputVectors().end();
-              ++p) {
+                p != x->outputVectors().end(); ++p) {
             bool found = false;
             for (QListViewItem *i = firstChild(); i; i = i->nextSibling()) {
 @ -173,4 +175,5  @ void KstObjectItem::update(bool recursiv
         _removable = x->getUsage() == 1;
         x->readUnlock();
+        }
         break;
       }



More information about the Kst mailing list