[Kst] [Bug 134499] kst freezes when calling data manager
Adam Treat
treat at kde.org
Tue Apr 3 20:17:02 CEST 2007
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
http://bugs.kde.org/show_bug.cgi?id=134499
treat kde org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |FIXED
------- Additional Comments From treat kde org 2007-04-03 20:17 -------
SVN commit 650056 by treat:
* Fix for deadlock
BUG:134499
M +6 -2 ksteventmonitor_i.cpp
M +6 -8 ksteventmonitorentry.cpp
--- trunk/extragear/graphics/kst/src/libkstapp/ksteventmonitor_i.cpp #650055:650056
@ -187,15 +187,19 @
}
EventMonitorEntryPtr event = new EventMonitorEntry(tag_name);
+ event->writeLock();
fillEvent(event);
if (!event->isValid()) {
+ event->unlock();
event = 0L;
KMessageBox::sorry(this, i18n("There is a syntax error in the equation you entered."));
return false;
}
+ event->unlock();
+
KST::dataObjectList.lock().writeLock();
KST::dataObjectList.append(event.data());
KST::dataObjectList.lock().unlock();
@ -255,10 +259,10 @
} else if (_w->radioButtonLogError->isChecked()) {
emPtr->setLevel(KstDebug::Error);
}
-
+
emPtr->reparse();
emPtr->unlock();
-
+
return true;
}
--- trunk/extragear/graphics/kst/src/libkstapp/ksteventmonitorentry.cpp #650055:650056
@ -118,6 +118,7 @
bool EventMonitorEntry::reparse() {
+ Q_ASSERT(myLockStatus() == KstRWLock::WRITELOCKED);
_isValid = false;
if (!_event.isEmpty()) {
QMutexLocker ml(&Equation::mutex());
@ -128,15 +129,12 @
Equation::Context ctx;
Equation::FoldVisitor vis(&ctx, &_pExpression);
KstStringMap stm;
- _pExpression->collectObjects(_vectorsUsed, _inputScalars, stm);
-
- for (KstScalarMap::ConstIterator i = _inputScalars.begin(); i != _inputScalars.end(); ++i) {
- if ((*i)->myLockStatus() == KstRWLock::UNLOCKED) {
- (*i)->readLock();
- }
- }
-
+ if (_pExpression->collectObjects(_vectorsUsed, _inputScalars, stm)) {
_isValid = true;
+ } else {
+ //we have bad objects...
+ delete (Equation::Node*)ParsedEquation;
+ }
} else {
delete (Equation::Node*)ParsedEquation;
}
More information about the Kst
mailing list