/* 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; }