/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140089b90 FUN_140089b90 * Pseudocode, not original source. */ void FUN_140089b90(wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,undefined8 param_4) { int iVar1; longlong *plVar2; bool bVar3; longlong *plVar4; wchar_t *pwVar5; int *piVar6; longlong lVar7; wchar_t *pwVar8; wchar_t *pwVar9; wchar_t *pwVar10; longlong lVar11; int iVar12; wchar_t *local_res8; wchar_t *local_res10; pwVar5 = param_1; local_res10 = param_2; if (*(longlong *)(param_1 + 0xbb0) == 0) { plVar4 = (longlong *)0x0; } else { plVar4 = *(longlong **)(param_1 + 0xba8); } for (; pwVar9 = local_res10, plVar4 != (longlong *)0x0; plVar4 = (longlong *)plVar4[2]) { if (plVar4 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80004005); } lVar11 = *plVar4; pwVar5 = (wchar_t *)(**(code **)(*(longlong *)(lVar11 + 0x108) + 0x10))(); bVar3 = FUN_14006b480((longlong)pwVar5); pwVar8 = pwVar9; if (bVar3) { FUN_14006cb70(pwVar5,param_2,param_3,param_4); local_res8 = (wchar_t *)PTR_DAT_1401ac010; param_2 = L"RemoteClient DeadLock - %s"; FUN_140053d20((longlong *)&local_res8,L"RemoteClient DeadLock - %s",pwVar9,param_4); pwVar10 = local_res8; pwVar5 = local_res8; if (local_res8 == (wchar_t *)0x0) { pwVar5 = (wchar_t *)PTR_DAT_1401ac010; } FUN_14006c280(pwVar5); pwVar8 = local_res10; param_3 = pwVar9; if (((pwVar10 != (wchar_t *)0x0) && (pwVar10 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar10 + -4 != (wchar_t *)0x0)) { pwVar5 = (wchar_t *)FUN_14006cb70(pwVar5,param_2,pwVar9,param_4); FUN_14006b350((int *)pwVar5); pwVar8 = pwVar10 + -2; *(int *)pwVar8 = *(int *)pwVar8 + -1; if (*(int *)pwVar8 == 0) { FUN_14006cc60(pwVar10 + -4); } FUN_14006b3e0((longlong)pwVar5); pwVar8 = local_res10; param_3 = pwVar9; } } if ((*(int *)(param_1 + 0xc22) == 0) && (plVar2 = *(longlong **)(lVar11 + 0x760), plVar2 != (longlong *)0x0)) { lVar11 = *plVar2; pwVar5 = (wchar_t *)0x0; if (lVar11 != 0) { pwVar5 = (wchar_t *)(**(code **)(*(longlong *)(lVar11 + 0x88) + 0x10))(); bVar3 = FUN_14006b480((longlong)pwVar5); if (bVar3) { FUN_14006cb70(pwVar5,param_2,param_3,param_4); local_res8 = (wchar_t *)PTR_DAT_1401ac010; param_2 = L"UDPSocket DeadLock - %s"; FUN_140053d20((longlong *)&local_res8,L"UDPSocket DeadLock - %s",pwVar8,param_4); pwVar9 = local_res8; pwVar5 = local_res8; if (local_res8 == (wchar_t *)0x0) { pwVar5 = (wchar_t *)PTR_DAT_1401ac010; } FUN_14006c280(pwVar5); param_3 = pwVar8; if (((pwVar9 != (wchar_t *)0x0) && (pwVar9 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar9 + -4 != (wchar_t *)0x0)) { pwVar5 = (wchar_t *)FUN_14006cb70(pwVar5,param_2,pwVar8,param_4); FUN_14006b350((int *)pwVar5); pwVar10 = pwVar9 + -2; *(int *)pwVar10 = *(int *)pwVar10 + -1; param_3 = pwVar8; if (*(int *)pwVar10 == 0) { FUN_14006cc60(pwVar9 + -4); param_3 = pwVar8; } FUN_14006b3e0((longlong)pwVar5); } } } } } if (*(int *)(param_1 + 0xc22) == 1) { iVar12 = 0; lVar11 = 0; iVar1 = *(int *)(param_1 + 0x370); if (0 < (longlong)iVar1) { do { if ((lVar11 < 0) || (*(int *)(param_1 + 0x370) <= iVar12)) { /* WARNING: Subroutine does not return */ FUN_14006be30(pwVar5,param_2,param_3,param_4); } plVar4 = *(longlong **)(*(longlong *)(param_1 + 0x36c) + lVar11 * 8); lVar7 = 0; if (plVar4 != (longlong *)0x0) { lVar7 = *plVar4; } pwVar5 = (wchar_t *)(**(code **)(*(longlong *)(lVar7 + 0x88) + 0x10))(); bVar3 = FUN_14006b480((longlong)pwVar5); if (bVar3) { FUN_14006cb70(pwVar5,param_2,param_3,param_4); local_res8 = (wchar_t *)PTR_DAT_1401ac010; param_2 = L"UDPSocket DeadLock - %s"; FUN_140053d20((longlong *)&local_res8,L"UDPSocket DeadLock - %s",pwVar9,param_4); pwVar8 = local_res8; pwVar5 = local_res8; if (local_res8 == (wchar_t *)0x0) { pwVar5 = (wchar_t *)PTR_DAT_1401ac010; } param_3 = pwVar9; FUN_14006c280(pwVar5); pwVar9 = local_res10; if (((pwVar8 != (wchar_t *)0x0) && (pwVar8 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar8 + -4 != (wchar_t *)0x0)) { pwVar5 = (wchar_t *)FUN_14006cb70(pwVar5,param_2,param_3,param_4); FUN_14006b350((int *)pwVar5); pwVar9 = pwVar8 + -2; *(int *)pwVar9 = *(int *)pwVar9 + -1; if (*(int *)pwVar9 == 0) { FUN_14006cc60(pwVar8 + -4); } FUN_14006b3e0((longlong)pwVar5); pwVar9 = local_res10; } } iVar12 = iVar12 + 1; lVar11 = lVar11 + 1; } while (lVar11 < iVar1); } } pwVar5 = param_1 + 0x3cc; bVar3 = FUN_14006b480((longlong)pwVar5); if (bVar3) { FUN_14006cb70(pwVar5,param_2,param_3,param_4); local_res8 = (wchar_t *)PTR_DAT_1401ac010; param_2 = L"NetServer tcpIssueQueueCS DeadLock!! - %s"; FUN_140053d20((longlong *)&local_res8,L"NetServer tcpIssueQueueCS DeadLock!! - %s",pwVar9, param_4); pwVar5 = local_res8; pwVar8 = local_res8; if (local_res8 == (wchar_t *)0x0) { pwVar8 = (wchar_t *)PTR_DAT_1401ac010; } FUN_14006c280(pwVar8); param_3 = pwVar9; if (((pwVar5 != (wchar_t *)0x0) && (pwVar5 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar5 + -4 != (wchar_t *)0x0)) { piVar6 = (int *)FUN_14006cb70(pwVar8,param_2,pwVar9,param_4); FUN_14006b350(piVar6); pwVar8 = pwVar5 + -2; *(int *)pwVar8 = *(int *)pwVar8 + -1; param_3 = pwVar9; if (*(int *)pwVar8 == 0) { FUN_14006cc60(pwVar5 + -4); param_3 = pwVar9; } FUN_14006b3e0((longlong)piVar6); } } pwVar5 = param_1 + 1000; bVar3 = FUN_14006b480((longlong)pwVar5); if (bVar3) { FUN_14006cb70(pwVar5,param_2,param_3,param_4); local_res8 = (wchar_t *)PTR_DAT_1401ac010; pwVar10 = L"NetServer udpIssueQueueCS DeadLock!! - %s"; pwVar8 = local_res10; FUN_140053d20((longlong *)&local_res8,L"NetServer udpIssueQueueCS DeadLock!! - %s",local_res10, param_4); pwVar5 = local_res8; pwVar9 = local_res8; if (local_res8 == (wchar_t *)0x0) { pwVar9 = (wchar_t *)PTR_DAT_1401ac010; } FUN_14006c280(pwVar9); if (((pwVar5 != (wchar_t *)0x0) && (pwVar5 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar5 + -4 != (wchar_t *)0x0)) { piVar6 = (int *)FUN_14006cb70(pwVar9,pwVar10,pwVar8,param_4); FUN_14006b350(piVar6); pwVar9 = pwVar5 + -2; *(int *)pwVar9 = *(int *)pwVar9 + -1; if (*(int *)pwVar9 == 0) { FUN_14006cc60(pwVar5 + -4); } FUN_14006b3e0((longlong)piVar6); } } return; }