/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c7b40 FUN_1400c7b40 * Pseudocode, not original source. */ void FUN_1400c7b40(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { wchar_t *pwVar1; undefined *puVar2; undefined *puVar3; longlong *plVar4; wchar_t *pwVar5; int *piVar6; wchar_t *pwVar7; wchar_t **ppwVar8; int *piVar9; undefined8 uVar10; undefined **ppuVar11; wchar_t *local_res8; undefined *local_78; wchar_t *local_70; undefined1 local_68; undefined8 local_60; wchar_t *local_58; undefined1 local_50; undefined **local_48; undefined8 local_40; undefined8 local_38; undefined8 local_30; undefined8 local_28; local_60 = 0xfffffffffffffffe; if ((*(longlong *)(param_1 + 0x148) != 0) && (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0)) { FUN_14006cb70(param_1,param_2,param_3,param_4); local_78 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_78,L"(%s): unexpected thread exit with (%s)",param_2,param_3); piVar9 = (int *)0x0; local_40 = 0; local_38 = 0; local_30 = 0; local_28 = 0; local_48 = Proud::ByteArray::vftable; ppuVar11 = &local_78; uVar10 = 1; FUN_140078c10((longlong *)&local_res8,1,1,(longlong *)ppuVar11,(longlong)&local_48); FUN_140078360(&local_48); local_70 = (wchar_t *)0x0; FUN_140078ae0((ulonglong *)&local_70,(ulonglong *)&local_res8,uVar10,ppuVar11); pwVar5 = *(wchar_t **)(param_1 + 0x148); ppwVar8 = &local_70; (**(code **)(*(longlong *)pwVar5 + 0x38))(); if ((char)param_4 != '\0') { if (local_res8 != (wchar_t *)0x0) { piVar9 = *(int **)(local_res8 + 0x1c); } ppwVar8 = &local_70; plVar4 = FUN_140078d30(piVar9,(longlong *)ppwVar8,uVar10,ppuVar11); pwVar5 = (wchar_t *)*plVar4; if ((wchar_t *)*plVar4 == (wchar_t *)0x0) { pwVar5 = (wchar_t *)PTR_DAT_1401ac010; } FUN_14006c280(pwVar5); pwVar7 = local_70; if (((local_70 != (wchar_t *)0x0) && (local_70 != (wchar_t *)PTR_DAT_1401ac010)) && (pwVar1 = local_70 + -4, pwVar1 != (wchar_t *)0x0)) { pwVar5 = (wchar_t *)FUN_14006cb70(pwVar5,ppwVar8,uVar10,ppuVar11); local_58 = pwVar5; FUN_14006b350((int *)pwVar5); local_50 = 1; pwVar7 = pwVar7 + -2; *(int *)pwVar7 = *(int *)pwVar7 + -1; if (*(int *)pwVar7 == 0) { FUN_14006cc60(pwVar1); } FUN_14006b3e0((longlong)pwVar5); } } pwVar7 = local_res8; if (local_res8 != (wchar_t *)0x0) { local_70 = local_res8; FUN_14006b350((int *)local_res8); local_68 = 1; *(longlong *)(local_res8 + 0x20) = *(longlong *)(local_res8 + 0x20) + -1; if (*(longlong *)(local_res8 + 0x20) == 0) { FUN_14006b3e0((longlong)pwVar7); local_68 = 0; FUN_1400640e0((undefined4 *)local_res8,ppwVar8,uVar10,ppuVar11); pwVar5 = local_res8; } else { FUN_14006b3e0((longlong)pwVar7); pwVar5 = pwVar7; } } puVar3 = local_78; if (((local_78 != (undefined *)0x0) && (local_78 != PTR_DAT_1401ac010)) && (puVar2 = local_78 + -8, puVar2 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(pwVar5,ppwVar8,uVar10,ppuVar11); local_58 = (wchar_t *)piVar6; FUN_14006b350(piVar6); local_50 = 1; piVar9 = (int *)(puVar3 + -4); *piVar9 = *piVar9 + -1; if (*piVar9 == 0) { FUN_14006cc60(puVar2); } FUN_14006b3e0((longlong)piVar6); } } return; }