Parser::~Parser() { CC_LOCKER_TRACK_P_MTX_LOCK(ParserCommon::s_ParserMutex) DisconnectEvents(); TerminateAllThreads(); if (ParserCommon::s_CurrentParser == this) ParserCommon::s_CurrentParser = nullptr; CC_LOCKER_TRACK_P_MTX_UNLOCK(ParserCommon::s_ParserMutex) }
Parser::~Parser() { TRACK_THREAD_LOCKER(s_ParserCritical); wxCriticalSectionLocker locker(s_ParserCritical); THREAD_LOCKER_SUCCESS(s_ParserCritical); DisconnectEvents(); TerminateAllThreads(); if (s_CurrentParser == this) s_CurrentParser = nullptr; }
Parser::~Parser() { // Don't wrap the s_ParserMutex lock around TerminateAllThreads(), since, it will cause a deadlock // in TerminateAllThreads() when calling DeleteParser() before parsing has finished. DisconnectEvents(); TerminateAllThreads(); CC_LOCKER_TRACK_P_MTX_LOCK(ParserCommon::s_ParserMutex) if (ParserCommon::s_CurrentParser == this) ParserCommon::s_CurrentParser = nullptr; CC_LOCKER_TRACK_P_MTX_UNLOCK(ParserCommon::s_ParserMutex) }