server-re/decomp/DBCServer_Release_x64/full/functions/0x1401a9fc0.c

101 lines
3 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a9fc0 FUN_1401a9fc0
* Pseudocode, not original source. */
void FUN_1401a9fc0(longlong param_1,undefined8 param_2,undefined8 param_3,char param_4)
{
undefined *puVar1;
int *piVar2;
longlong *plVar3;
undefined8 uVar4;
undefined *puVar5;
undefined *local_res8;
undefined *local_78;
undefined *local_70;
undefined1 local_68;
undefined8 local_60;
undefined8 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_14016d8c0();
local_78 = PTR_DAT_1403440a0;
FUN_14004c020(&local_78,L"(%s): unexpected thread exit with (%s)",param_2,param_3);
uVar4 = 0;
local_40 = 0;
local_38 = 0;
local_30 = 0;
local_28 = 0;
local_48 = Proud::ByteArray::vftable;
FUN_140198f80(&local_res8,1,1,&local_78,&local_48);
FUN_14019a9e0(&local_48);
local_70 = (undefined *)0x0;
FUN_140184b90(&local_70,&local_res8);
(**(code **)(**(longlong **)(param_1 + 0x148) + 0x38))
(*(longlong **)(param_1 + 0x148),&local_70);
if (param_4 != '\0') {
if (local_res8 != (undefined *)0x0) {
uVar4 = *(undefined8 *)(local_res8 + 0x38);
}
plVar3 = (longlong *)FUN_1401990a0(uVar4,&local_70);
puVar5 = (undefined *)*plVar3;
if ((undefined *)*plVar3 == (undefined *)0x0) {
puVar5 = PTR_DAT_1403440a0;
}
FUN_14016f090(puVar5);
puVar5 = local_70;
if (((local_70 != (undefined *)0x0) && (local_70 != PTR_DAT_1403440a0)) &&
(puVar1 = local_70 + -8, puVar1 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_58 = uVar4;
FUN_14016db50(uVar4);
local_50 = 1;
piVar2 = (int *)(puVar5 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar1);
}
FUN_14016dbe0(uVar4);
}
}
puVar5 = local_res8;
if (local_res8 != (undefined *)0x0) {
local_70 = local_res8;
FUN_14016db50(local_res8);
local_68 = 1;
*(longlong *)(local_res8 + 0x40) = *(longlong *)(local_res8 + 0x40) + -1;
if (*(longlong *)(local_res8 + 0x40) == 0) {
FUN_14016dbe0(puVar5);
local_68 = 0;
FUN_140154a90(local_res8);
}
else {
FUN_14016dbe0(puVar5);
}
}
puVar5 = local_78;
if (((local_78 != (undefined *)0x0) && (local_78 != PTR_DAT_1403440a0)) &&
(puVar1 = local_78 + -8, puVar1 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_58 = uVar4;
FUN_14016db50(uVar4);
local_50 = 1;
piVar2 = (int *)(puVar5 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar1);
}
FUN_14016dbe0(uVar4);
}
}
return;
}