server-re/decomp/AgentManager_Release_x64/full/functions/0x14009b2c0.c
2026-10-15 09:58:24 -04:00

64 lines
2.1 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14009b2c0 FUN_14009b2c0
* Pseudocode, not original source. */
void FUN_14009b2c0(wchar_t *param_1,LPVOID param_2,longlong *param_3,undefined8 param_4)
{
undefined8 *puVar1;
LPVOID pvVar2;
wchar_t *pwVar3;
int iVar4;
longlong lVar5;
pwVar3 = param_1;
FUN_14003d040((int *)param_1);
if (0 < *(int *)(param_1 + 0x24)) {
pwVar3 =
L"CHeartbeatWorkThread must be cleaned up only after every work items are unregistered!";
FUN_14003e110(
L"CHeartbeatWorkThread must be cleaned up only after every work items are unregistered!"
);
}
*(undefined1 *)(param_1 + 0x40) = 0;
iVar4 = 0;
lVar5 = 0;
if (0 < *(int *)(param_1 + 0x34)) {
do {
if ((lVar5 < 0) || (*(int *)(param_1 + 0x34) <= iVar4)) {
/* WARNING: Subroutine does not return */
FUN_14003def0(pwVar3,param_2,param_3,param_4);
}
puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x30) + lVar5 * 8);
pwVar3 = (wchar_t *)0x0;
if (puVar1 != (undefined8 *)0x0) {
pwVar3 = (wchar_t *)*puVar1;
}
FUN_140045bb0((undefined8 *)pwVar3);
iVar4 = iVar4 + 1;
lVar5 = lVar5 + 1;
} while (iVar4 < *(int *)(param_1 + 0x34));
}
FUN_14003d0d0((longlong)param_1);
*(undefined ***)(param_1 + 0x28) = Proud::CFastArray<Proud::RefCount<Proud::Thread>,0>::vftable;
pvVar2 = (LPVOID)(longlong)*(int *)(param_1 + 0x34);
if (0 < *(int *)(param_1 + 0x34)) {
FUN_14005cbc0(*(longlong **)(param_1 + 0x30),(longlong)pvVar2);
param_2 = pvVar2;
}
pvVar2 = *(LPVOID *)(param_1 + 0x30);
if (pvVar2 != (LPVOID)0x0) {
param_3 = *(longlong **)(param_1 + 0x2c);
if (param_3 == (longlong *)0x0) {
FUN_14003e8b0(pvVar2);
}
else {
(**(code **)(*param_3 + 0x18))(param_3);
param_2 = pvVar2;
}
}
FUN_14009af00((longlong *)(param_1 + 0x1c));
FUN_14003d110((undefined4 *)param_1,param_2,param_3,param_4);
return;
}