Implement/match MxDiskStreamController destructor (#379)

This commit is contained in:
Christian Semmler 2023-12-28 11:19:40 -05:00 committed by GitHub
parent 4d7968c7af
commit e3488498f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 19 deletions

View File

@ -15,10 +15,41 @@ MxDiskStreamController::MxDiskStreamController()
m_unk0x8c = 0; m_unk0x8c = 0;
} }
// STUB: LEGO1 0x100c7530 // FUNCTION: LEGO1 0x100c7530
MxDiskStreamController::~MxDiskStreamController() MxDiskStreamController::~MxDiskStreamController()
{ {
// TODO MxAutoLocker lock(&this->m_criticalSection);
m_unk0xc4 = FALSE;
m_unk0x70 = FALSE;
if (m_provider)
m_provider->VTable0x20(&MxDSAction());
MxDSAction* action;
while (m_unk0x3c.PopFront(action))
delete action;
if (m_provider) {
delete m_provider;
m_provider = NULL;
}
FUN_100c8720();
while (m_list0x80.PopFront(action))
FUN_100c7cb0((MxDSStreamingAction*) action);
while (m_list0x64.PopFront(action))
FUN_100c7cb0((MxDSStreamingAction*) action);
while (!m_list0x74.empty()) {
MxDSBuffer* buffer = m_list0x74.front();
m_list0x74.pop_front();
FUN_100c7ce0(buffer);
}
TickleManager()->UnregisterClient(this);
} }
// FUNCTION: LEGO1 0x100c7790 // FUNCTION: LEGO1 0x100c7790
@ -257,8 +288,8 @@ MxResult MxDiskStreamController::VTable0x20(MxDSAction* p_action)
else if (MxStreamController::VTable0x20(p_action) != SUCCESS) else if (MxStreamController::VTable0x20(p_action) != SUCCESS)
return FAILURE; return FAILURE;
m_unk0x70 = 1; m_unk0x70 = TRUE;
m_unk0xc4 = 1; m_unk0xc4 = TRUE;
return SUCCESS; return SUCCESS;
} }
@ -289,9 +320,9 @@ MxResult MxDiskStreamController::VTable0x24(MxDSAction* p_action)
MxStreamController::VTable0x24(&action); MxStreamController::VTable0x24(&action);
} while (m_action0x60 != NULL); } while (m_action0x60 != NULL);
if (m_unk0x3c.size() == 0) { if (m_unk0x3c.empty()) {
m_unk0x70 = 0; m_unk0x70 = FALSE;
m_unk0xc4 = 0; m_unk0xc4 = FALSE;
} }
return SUCCESS; return SUCCESS;
@ -389,7 +420,7 @@ void MxDiskStreamController::FUN_100c8720()
MxAutoLocker lock(&this->m_critical9c); MxAutoLocker lock(&this->m_critical9c);
MxDSStreamingAction* action; MxDSStreamingAction* action;
while (m_list0xb8.size() != 0) { while (!m_list0xb8.empty()) {
action = (MxDSStreamingAction*) m_list0xb8.front(); action = (MxDSStreamingAction*) m_list0xb8.front();
m_list0xb8.pop_front(); m_list0xb8.pop_front();

View File

@ -49,7 +49,7 @@ public:
private: private:
MxStreamListMxDSAction m_list0x64; // 0x64 MxStreamListMxDSAction m_list0x64; // 0x64
undefined m_unk0x70; // 0x70 MxBool m_unk0x70; // 0x70
list<MxDSBuffer*> m_list0x74; // 0x74 list<MxDSBuffer*> m_list0x74; // 0x74
MxStreamListMxDSAction m_list0x80; // 0x80 MxStreamListMxDSAction m_list0x80; // 0x80
undefined2 m_unk0x8c; // 0x8c undefined2 m_unk0x8c; // 0x8c

View File

@ -11,7 +11,7 @@ undefined* __cdecl ReadData(MxU32* p_fileSizeBuffer, MxU32 p_fileSize);
// FUNCTION: LEGO1 0x100c6110 // FUNCTION: LEGO1 0x100c6110
MxResult MxRAMStreamController::Open(const char* p_filename) MxResult MxRAMStreamController::Open(const char* p_filename)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
if (MxStreamController::Open(p_filename) != SUCCESS) { if (MxStreamController::Open(p_filename) != SUCCESS) {
return FAILURE; return FAILURE;
} }
@ -39,7 +39,7 @@ MxResult MxRAMStreamController::Open(const char* p_filename)
// FUNCTION: LEGO1 0x100c6210 // FUNCTION: LEGO1 0x100c6210
MxResult MxRAMStreamController::VTable0x20(MxDSAction* p_action) MxResult MxRAMStreamController::VTable0x20(MxDSAction* p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxS32 unk0x24 = 0; MxS32 unk0x24 = 0;
MxResult result = FAILURE; MxResult result = FAILURE;
@ -83,7 +83,7 @@ MxResult MxRAMStreamController::VTable0x24(MxDSAction* p_action)
// FUNCTION: LEGO1 0x100c63c0 // FUNCTION: LEGO1 0x100c63c0
MxResult MxRAMStreamController::DeserializeObject(MxDSStreamingAction& p_action) MxResult MxRAMStreamController::DeserializeObject(MxDSStreamingAction& p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxResult result; MxResult result;
MxDSStreamingAction* value = NULL; MxDSStreamingAction* value = NULL;

View File

@ -72,7 +72,7 @@ MxStreamController::~MxStreamController()
MxResult MxStreamController::Open(const char* p_filename) MxResult MxStreamController::Open(const char* p_filename)
{ {
char sourceName[256]; char sourceName[256];
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MakeSourceName(sourceName, p_filename); MakeSourceName(sourceName, p_filename);
this->m_atom = MxAtomId(sourceName, LookupMode_LowerCase2); this->m_atom = MxAtomId(sourceName, LookupMode_LowerCase2);
@ -94,7 +94,7 @@ void MxStreamController::RemoveSubscriber(MxDSSubscriber* p_subscriber)
// FUNCTION: LEGO1 0x100c1690 // FUNCTION: LEGO1 0x100c1690
MxResult MxStreamController::VTable0x20(MxDSAction* p_action) MxResult MxStreamController::VTable0x20(MxDSAction* p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxResult result; MxResult result;
MxU32 offset = 0; MxU32 offset = 0;
@ -116,7 +116,7 @@ MxResult MxStreamController::VTable0x20(MxDSAction* p_action)
// FUNCTION: LEGO1 0x100c1740 // FUNCTION: LEGO1 0x100c1740
MxResult MxStreamController::VTable0x24(MxDSAction* p_action) MxResult MxStreamController::VTable0x24(MxDSAction* p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
VTable0x30(p_action); VTable0x30(p_action);
m_action0x60 = m_unk0x54.Find(p_action, TRUE); m_action0x60 = m_unk0x54.Find(p_action, TRUE);
if (m_action0x60 == NULL) { if (m_action0x60 == NULL) {
@ -201,7 +201,7 @@ MxResult MxStreamController::FUN_100c1a00(MxDSAction* p_action, MxU32 p_offset)
// FUNCTION: LEGO1 0x100c1c10 // FUNCTION: LEGO1 0x100c1c10
MxResult MxStreamController::VTable0x2c(MxDSAction* p_action, MxU32 p_bufferval) MxResult MxStreamController::VTable0x2c(MxDSAction* p_action, MxU32 p_bufferval)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
if (FUN_100c1a00(p_action, p_bufferval) != SUCCESS) { if (FUN_100c1a00(p_action, p_bufferval) != SUCCESS) {
return FAILURE; return FAILURE;
} }
@ -211,7 +211,7 @@ MxResult MxStreamController::VTable0x2c(MxDSAction* p_action, MxU32 p_bufferval)
// FUNCTION: LEGO1 0x100c1ce0 // FUNCTION: LEGO1 0x100c1ce0
MxResult MxStreamController::VTable0x30(MxDSAction* p_action) MxResult MxStreamController::VTable0x30(MxDSAction* p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxResult result = FAILURE; MxResult result = FAILURE;
MxDSAction* action = m_unk0x3c.Find(p_action, TRUE); MxDSAction* action = m_unk0x3c.Find(p_action, TRUE);
if (action != NULL) { if (action != NULL) {
@ -226,7 +226,7 @@ MxResult MxStreamController::VTable0x30(MxDSAction* p_action)
// FUNCTION: LEGO1 0x100c1da0 // FUNCTION: LEGO1 0x100c1da0
MxResult MxStreamController::InsertActionToList54(MxDSAction* p_action) MxResult MxStreamController::InsertActionToList54(MxDSAction* p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxDSAction* action = p_action->Clone(); MxDSAction* action = p_action->Clone();
if (action == NULL) { if (action == NULL) {
@ -241,7 +241,7 @@ MxResult MxStreamController::InsertActionToList54(MxDSAction* p_action)
// FUNCTION: LEGO1 0x100c1e70 // FUNCTION: LEGO1 0x100c1e70
MxPresenter* MxStreamController::FUN_100c1e70(MxDSAction& p_action) MxPresenter* MxStreamController::FUN_100c1e70(MxDSAction& p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
MxPresenter* result = NULL; MxPresenter* result = NULL;
if (p_action.GetObjectId() != -1) { if (p_action.GetObjectId() != -1) {
MxDSAction* action = m_unk0x3c.Find(&p_action, FALSE); MxDSAction* action = m_unk0x3c.Find(&p_action, FALSE);