Hi all. It is a question, not a problem any more.
When I shut my engine down after approximately 2 seconds it did shut down properly.
When I waited longer an error occured.
The logfile told me that it didn't succeed in removing a Trigger* object pointer from a std::list then.
Guess the error occurred there:
void Device::remove_pTrigger(Trigger* pTrigger) {
std::list<Trigger*>::iterator it = find(m_pTriggers->begin(),
m_pTriggers->end(),
pTrigger);
if (it!=m_pTriggers->end()) {
m_pTriggers->erase(it);
(*it)->get_pCondition()->free();
(*it)->get_pEvent()->free();
(*it)->free();
#if defined( DD_LOGGING )
LOG << "Successfully removed trigger<br />" << ENDL;
m_pLog->flush("Removing Trigger");
#endif
} else {
#if defined( DD_LOGGING )
LOG << "Trigger not found<br />" << ENDL;
m_pLog->flush("Removing Trigger", debug::FlushError);
#endif
}
}
... when the Destructor of my engine calls leave() for my appstate ...
Device::~Device() {
if (m_pAppstate) {
m_pAppstate->leave(); m_pAppstate = NULL;
}
clear_tasks(); delete m_pTasks; delete m_pPausedTasks;
clear_triggers(); delete m_pTriggers;
clear_hooks(); delete m_pHooks;
#if defined(DD_LOGGING)
if (m_pLog)
m_pLog->free(); m_pLog = NULL;
#endif
}
... here is what the leave() procedure looks like:
void TestApps::leave() {
DEVICE->remove_pTask(m_pTestTask);
DEVICE->remove_pTask(m_pTestTask2);
DEVICE->remove_pTask(m_pTestTask3);
DEVICE->remove_pTask(m_pTestTask4);
DEVICE->remove_pTask(m_pTestTask5);
DEVICE->remove_pTrigger(m_pTestTrigger);
set_isEntered(false);
}
I moved the leave() method call from the Destructor to the uninitialize() function.
That fixed the problem.
The question:
Is this normal behaviour when it is done from a Destructor?
Why does the passed time after initializing the engine play a role at all?