From dfea153641d01ec96da80c55da30ea3b3bd6de72 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 13 Oct 2023 12:35:46 -0400 Subject: [PATCH] Fix MxEventManager --- LEGO1/mxeventmanager.cpp | 40 +++++++++++++++++++++++++--------------- LEGO1/mxeventmanager.h | 4 ++++ LEGO1/mxmediamanager.cpp | 21 +-------------------- LEGO1/mxmediamanager.h | 1 - 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/LEGO1/mxeventmanager.cpp b/LEGO1/mxeventmanager.cpp index 0861af77..e06f80af 100644 --- a/LEGO1/mxeventmanager.cpp +++ b/LEGO1/mxeventmanager.cpp @@ -13,7 +13,7 @@ MxEventManager::MxEventManager() // OFFSET: LEGO1 0x100c03f0 MxEventManager::~MxEventManager() { - TerminateThread(TRUE); + Destroy(TRUE); } // OFFSET: LEGO1 0x100c0450 @@ -22,6 +22,20 @@ void MxEventManager::Init() // This is intentionally left blank } +// OFFSET: LEGO1 0x100c0460 +void MxEventManager::Destroy(MxBool p_fromDestructor) +{ + if (m_thread != NULL) { + m_thread->Terminate(); + delete m_thread; + } + else + TickleManager()->UnregisterClient(this); + + if (!p_fromDestructor) + MxMediaManager::Destroy(); +} + // OFFSET: LEGO1 0x100c04a0 MxResult MxEventManager::CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister) { @@ -29,38 +43,34 @@ MxResult MxEventManager::CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegis MxBool locked = FALSE; MxResult result = MxMediaManager::InitPresenters(); - if (result == SUCCESS) - { - if (p_noRegister) - { + if (result == SUCCESS) { + if (p_noRegister) { this->m_criticalSection.Enter(); locked = TRUE; this->m_thread = new MxTickleThread(this, p_frequencyMS); - if (this->m_thread) - { + if (this->m_thread) { if (this->m_thread->Start(0, 0) == SUCCESS) - { status = SUCCESS; - } } } - else - { + else { TickleManager()->RegisterClient(this, p_frequencyMS); status = SUCCESS; } } if (status != SUCCESS) - { Destroy(); - } if (locked) - { this->m_criticalSection.Leave(); - } return status; } + +// OFFSET: LEGO1 0x100c0590 +void MxEventManager::Destroy() +{ + Destroy(FALSE); +} diff --git a/LEGO1/mxeventmanager.h b/LEGO1/mxeventmanager.h index 1ef43748..0dd18844 100644 --- a/LEGO1/mxeventmanager.h +++ b/LEGO1/mxeventmanager.h @@ -11,9 +11,13 @@ class MxEventManager : public MxMediaManager public: MxEventManager(); virtual ~MxEventManager() override; + + virtual void Destroy() override; // vtable+18 virtual MxResult CreateEventThread(MxU32 p_frequencyMS, MxBool p_noRegister); // vtable+28 + private: void Init(); + void Destroy(MxBool p_fromDestructor); }; #endif // MXEVENTMANAGER_H diff --git a/LEGO1/mxmediamanager.cpp b/LEGO1/mxmediamanager.cpp index c992cd42..a798e52d 100644 --- a/LEGO1/mxmediamanager.cpp +++ b/LEGO1/mxmediamanager.cpp @@ -98,23 +98,4 @@ void MxMediaManager::StopPresenters() while (cursor.Next(presenter)) presenter->EndAction(); -} - -// OFFSET: LEGO1 0x100c0460 -void MxMediaManager::TerminateThread(MxBool p_reinit) -{ - if(m_thread != NULL) - { - m_thread->Terminate(); - delete m_thread; - } - else - { - TickleManager()->UnregisterClient(this); - } - - if(!p_reinit) - { - MxMediaManager::Destroy(); - } -} +} \ No newline at end of file diff --git a/LEGO1/mxmediamanager.h b/LEGO1/mxmediamanager.h index c17ab300..db8d9056 100644 --- a/LEGO1/mxmediamanager.h +++ b/LEGO1/mxmediamanager.h @@ -23,7 +23,6 @@ class MxMediaManager : public MxCore virtual void StopPresenters(); // vtable+24 MxResult Init(); - void TerminateThread(MxBool p_reinit); protected: MxPresenterList *m_presenters;