209 lines
7.3 KiB
C
209 lines
7.3 KiB
C
/* 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;
|
|
}
|
|
|