Summary: | crash when changing curve name while viewing live data | ||
---|---|---|---|
Product: | [Applications] kst | Reporter: | Matthew Truch <matt> |
Component: | general | Assignee: | kst |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | 1.x | ||
Target Milestone: | --- | ||
Platform: | RedHat Enterprise Linux | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Matthew Truch
2004-08-29 04:19:28 UTC
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; } |