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;
}
// STUB: LEGO1 0x100c7530
// FUNCTION: LEGO1 0x100c7530
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
@ -257,8 +288,8 @@ MxResult MxDiskStreamController::VTable0x20(MxDSAction* p_action)
else if (MxStreamController::VTable0x20(p_action) != SUCCESS)
return FAILURE;
m_unk0x70 = 1;
m_unk0xc4 = 1;
m_unk0x70 = TRUE;
m_unk0xc4 = TRUE;
return SUCCESS;
}
@ -289,9 +320,9 @@ MxResult MxDiskStreamController::VTable0x24(MxDSAction* p_action)
MxStreamController::VTable0x24(&action);
} while (m_action0x60 != NULL);
if (m_unk0x3c.size() == 0) {
m_unk0x70 = 0;
m_unk0xc4 = 0;
if (m_unk0x3c.empty()) {
m_unk0x70 = FALSE;
m_unk0xc4 = FALSE;
}
return SUCCESS;
@ -389,7 +420,7 @@ void MxDiskStreamController::FUN_100c8720()
MxAutoLocker lock(&this->m_critical9c);
MxDSStreamingAction* action;
while (m_list0xb8.size() != 0) {
while (!m_list0xb8.empty()) {
action = (MxDSStreamingAction*) m_list0xb8.front();
m_list0xb8.pop_front();

View file

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

View file

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

View file

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