A shutdown question (Destructors)

Started by
-1 comments, last by Clueless 17 years, 11 months ago
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?
Writing errors since 10/25/2003 2:25:56 AM

This topic is closed to new replies.

Advertisement