bugfix: properly remove remaining events of terminating experiment
Before this commit, EventList::getEventsOf() broke when *two* experiment flows terminated in direct succession: (*it)->getParent() fails if the underlying event doesn't exist anymore. To fix this, I moved the event removal from SimulatorController to EventList::remove(flow), and made it work on the internal event list magic similarly to EventList::remove(event). And I tested it with a few known-working experiments. git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1022 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
@ -210,15 +210,6 @@ void SimulatorController::onJumpEvent(bool flagTriggered, unsigned opcode)
|
||||
m_EvList.fireActiveEvents();
|
||||
}
|
||||
|
||||
void SimulatorController::cleanup(fi::ExperimentFlow* pExp)
|
||||
{
|
||||
// remove related events:
|
||||
std::vector<fi::BaseEvent*> evlist;
|
||||
m_EvList.getEventsOf(pExp, evlist);
|
||||
for(size_t i = 0; i < evlist.size(); i++)
|
||||
m_EvList.remove(evlist[i]);
|
||||
}
|
||||
|
||||
void SimulatorController::addFlow(fi::ExperimentFlow* flow)
|
||||
{
|
||||
// Store the (flow,corohandle)-tuple internally and create its coroutine:
|
||||
@ -230,7 +221,7 @@ void SimulatorController::addFlow(fi::ExperimentFlow* flow)
|
||||
void SimulatorController::removeFlow(fi::ExperimentFlow* flow)
|
||||
{
|
||||
// remove all remaining events of this flow
|
||||
cleanup(flow);
|
||||
clearEvents(flow);
|
||||
// remove coroutine
|
||||
m_Flows.remove(flow);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user