L L4D2node

CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1>::Run

0x00200b50 · 2005 bytes · __thiscall

_ZN18CParallelProcessorIP11CGameClient21CFuncJobItemProcessorIS1_ELi1EE3RunEPS1_jiP11IThreadPool

Decompiled

undefined (5 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CParallelProcessor<CGameClient*, CFuncJobItemProcessor<CGameClient*>, 1>::Run(CGameClient**,
   unsigned int, int, IThreadPool*) */

void __thiscall
CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1>::Run
          (CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1> *this,
          CGameClient **param_1,uint param_2,int param_3,IThreadPool *param_4)

{
  uint uVar1;
  CGameClient *pCVar2;
  code *pcVar3;
  int iVar4;
  int *piVar5;
  int iVar6;
  CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1> *pCVar7;
  undefined4 uVar8;
  undefined4 *****pppppuVar9;
  undefined4 *puVar10;
  undefined4 uVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  IThreadPool *pIVar15;
  IThreadPool *pIVar16;
  IThreadPool **ppIVar17;
  int in_GS_OFFSET;
  undefined4 uStack_e0;
  IThreadPool *local_dc;
  undefined4 *****local_d8;
  uint local_d4 [4];
  char *local_c4 [5];
  uint local_b0 [4];
  undefined1 auStack_a0 [4];
  CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1> *local_9c;
  int local_98;
  CGameClient *local_94;
  undefined1 *local_90;
  int *local_88;
  undefined4 *****local_84;
  uint local_80;
  undefined4 *****local_7c;
  uint local_78;
  undefined4 *****local_74;
  uint local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 *****local_64;
  uint local_60;
  undefined4 *****local_5c;
  uint local_58;
  IThreadPool *local_54;
  undefined4 *****local_50;
  uint local_4c;
  IThreadPool *local_48;
  undefined4 *****local_44;
  uint local_40;
  IThreadPool *local_3c;
  undefined4 local_38;
  undefined4 local_34;
  IThreadPool *local_30;
  undefined4 *****local_2c;
  uint local_28;
  IThreadPool *local_24;
  int local_20;
  
  local_84 = (undefined4 ******)0x0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_80 = 0;
  if (_g_Telemetry == (IThreadPool *)0x0) {
    local_54 = (IThreadPool *)0x0;
  }
  else {
    local_b0[0] = param_2;
    local_c4[4] = *(char **)(this + 0x14);
    local_dc = _g_Telemetry;
    local_c4[3] = "Run %s %d";
    local_c4[2] = (char *)&Run(CGameClient**,unsigned_int,int,IThreadPool*)::tm_fmt;
    local_c4[1] = (char *)0x367;
    local_d8 = &local_84;
    local_c4[0] = "/data/src/public/vstdlib/jobthread.h";
    local_d4[3] = 0;
    local_d4[1] = 0;
    local_d4[2] = 0;
    local_d4[0] = 0;
    uStack_e0 = 0x200be6;
    (*(code *)*(CGameClient **)(_g_Telemetry + 0x50))();
    local_54 = _g_Telemetry;
  }
  pIVar15 = _g_pThreadPool;
  local_5c = local_84;
  local_58 = local_80;
  if (param_2 == 0) {
LAB_002012cf:
    ppIVar17 = &local_dc;
    if (local_54 != (IThreadPool *)0x0) {
      local_d4[3] = 0;
      local_d4[2] = 0;
      local_d4[1] = 0;
      local_d8 = local_5c;
      local_d4[0] = local_58;
      uStack_e0 = 0x201303;
      local_dc = local_54;
      (*(code *)*(CGameClient **)(local_54 + 0x54))();
      ppIVar17 = &local_dc;
    }
  }
  else {
    if (param_4 == (IThreadPool *)0x0) {
      local_9c = this + 0xc;
      LOCK();
      *(CGameClient ***)local_9c = param_1;
      UNLOCK();
      pIVar16 = (IThreadPool *)(param_1 + param_2);
      *(IThreadPool **)(this + 0x10) = pIVar16;
      if (pIVar15 == (IThreadPool *)0x0) {
        local_7c = (undefined4 ******)0x0;
        local_78 = 0;
        if (_g_Telemetry == (IThreadPool *)0x0) {
          local_48 = (IThreadPool *)0x0;
        }
        else {
          local_c4[4] = *(char **)(this + 0x14);
          local_c4[3] = "DoExecute %s";
          local_c4[2] = (char *)&DoExecute()::tm_fmt;
          local_c4[1] = (char *)0x3a9;
          local_c4[0] = "/data/src/public/vstdlib/jobthread.h";
          local_d8 = &local_7c;
          local_d4[3] = 0;
          local_d4[1] = 0;
          local_d4[2] = 0;
          local_d4[0] = 0;
          local_dc = _g_Telemetry;
                    /* try { // try from 0020123f to 00201241 has its CatchHandler @ 002013b7 */
          uStack_e0 = 0x201242;
          (*(code *)*(CGameClient **)(_g_Telemetry + 0x50))();
          pIVar16 = *(IThreadPool **)(this + 0x10);
          local_48 = _g_Telemetry;
        }
        local_50 = local_7c;
        local_4c = local_78;
        if (*(IThreadPool **)(this + 0xc) < pIVar16) {
          if (*(code **)(this + 4) != (code *)0x0) {
                    /* try { // try from 00201268 to 00201298 has its CatchHandler @ 0020136f */
            uStack_e0 = 0x20126a;
            (**(code **)(this + 4))();
            pIVar16 = *(IThreadPool **)(this + 0x10);
          }
          while( true ) {
            LOCK();
            pIVar15 = *(IThreadPool **)local_9c;
            *(uint *)local_9c = *(uint *)local_9c + 4;
            UNLOCK();
            if (pIVar16 <= pIVar15) break;
            uStack_e0 = 0x20127d;
            local_dc = pIVar15;
            (**(code **)this)();
          }
          if (*(code **)(this + 8) != (code *)0x0) {
            uStack_e0 = 0x201299;
            (**(code **)(this + 8))();
          }
        }
        if (local_48 != (IThreadPool *)0x0) {
          local_d4[3] = 0;
          local_d4[2] = 0;
          local_d4[1] = 0;
          local_d8 = local_50;
          local_d4[0] = local_4c;
          uStack_e0 = 0x2012cc;
          local_dc = local_48;
          (*(code *)*(CGameClient **)(local_48 + 0x54))();
        }
        goto LAB_002012cf;
      }
      iVar13 = param_2 - 1;
      if (param_3 < (int)(param_2 - 1)) {
        iVar13 = param_3;
      }
    }
    else {
      LOCK();
      *(CGameClient ***)(this + 0xc) = param_1;
      UNLOCK();
      *(CGameClient ***)(this + 0x10) = param_1 + param_2;
      iVar13 = param_2 - 1;
      pIVar15 = param_4;
      if (param_3 < (int)(param_2 - 1)) {
        iVar13 = param_3;
      }
    }
    local_9c = this + 0xc;
                    /* try { // try from 00200c35 to 00200d6d has its CatchHandler @ 002013b7 */
    uStack_e0 = 0x200c38;
    local_dc = pIVar15;
    local_98 = (**(code **)(*(CGameClient **)pIVar15 + 0x1c))();
    if (iVar13 <= local_98) {
      local_98 = iVar13;
    }
    if (local_98 < 1) {
      local_64 = (undefined4 ******)0x0;
      local_60 = 0;
      if (_g_Telemetry == (IThreadPool *)0x0) {
        local_24 = (IThreadPool *)0x0;
      }
      else {
        local_c4[4] = *(char **)(this + 0x14);
        local_c4[3] = "DoExecute %s";
        local_c4[2] = (char *)&DoExecute()::tm_fmt;
        local_c4[1] = (char *)0x3a9;
        local_c4[0] = "/data/src/public/vstdlib/jobthread.h";
        local_d8 = &local_64;
        local_d4[3] = 0;
        local_d4[1] = 0;
        local_d4[2] = 0;
        local_d4[0] = 0;
        local_dc = _g_Telemetry;
                    /* try { // try from 002010dc to 002010de has its CatchHandler @ 002013b7 */
        uStack_e0 = 0x2010df;
        (*(code *)*(CGameClient **)(_g_Telemetry + 0x50))();
        local_24 = _g_Telemetry;
      }
      pIVar15 = *(IThreadPool **)(this + 0x10);
      local_2c = local_64;
      local_28 = local_60;
      if (*(IThreadPool **)(this + 0xc) < pIVar15) {
        if (*(code **)(this + 4) != (code *)0x0) {
                    /* try { // try from 00201105 to 00201130 has its CatchHandler @ 00201390 */
          uStack_e0 = 0x201107;
          (**(code **)(this + 4))();
          pIVar15 = *(IThreadPool **)(this + 0x10);
        }
        while( true ) {
          LOCK();
          pIVar16 = *(IThreadPool **)local_9c;
          *(uint *)local_9c = *(uint *)local_9c + 4;
          UNLOCK();
          if (pIVar15 <= pIVar16) break;
          uStack_e0 = 0x201115;
          local_dc = pIVar16;
          (**(code **)this)();
        }
        if (*(code **)(this + 8) != (code *)0x0) {
          uStack_e0 = 0x201131;
          (**(code **)(this + 8))();
        }
      }
      ppIVar17 = &local_dc;
      if (local_24 != (IThreadPool *)0x0) {
        local_d4[3] = 0;
        local_d4[2] = 0;
        local_d4[1] = 0;
        local_d8 = local_2c;
        local_d4[0] = local_28;
        uStack_e0 = 0x201164;
        local_dc = local_24;
        (*(code *)*(CGameClient **)(local_24 + 0x54))();
        ppIVar17 = &local_dc;
      }
    }
    else {
      iVar13 = local_98 + -1;
      iVar6 = -((local_98 * 4 + 0xfU & 0xfffffff0) + 0x10);
      local_90 = auStack_a0 + iVar6;
      do {
        pCVar2 = *(CGameClient **)(*(CGameClient **)pIVar15 + 0x54);
        *(undefined4 *)((int)&local_dc + iVar6) = 0x1c;
        local_94 = pCVar2;
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200c87;
        puVar10 = operator_new(*(uint *)((int)&local_dc + iVar6));
        puVar10[3] = 1;
        *puVar10 = &PTR_AddRef_002c3a48;
        puVar10[2] = &PTR__CMemberFunctor0_002c3a64;
        puVar10[4] = DoExecute;
        puVar10[5] = 0;
        puVar10[6] = this;
        *(undefined4 **)((int)local_d4 + iVar6 + -4) = puVar10;
        pCVar2 = local_94;
        *(undefined4 *)((int)local_d4 + iVar6 + 8) = 8;
        *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
        *(int ***)((int)local_d4 + iVar6) = &local_88;
        *(IThreadPool **)((int)&local_dc + iVar6) = pIVar15;
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200cd5;
        (*(code *)pCVar2)();
        piVar5 = local_88;
        uVar11 = *(undefined4 *)(this + 0x14);
        *(int **)(local_90 + iVar13 * 4) = local_88;
        iVar12 = *local_88;
        *(undefined4 *)((int)local_d4 + iVar6 + -4) = uVar11;
        *(int **)((int)&local_dc + iVar6) = piVar5;
        pcVar3 = *(code **)(iVar12 + 0x14);
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200cf3;
        (*pcVar3)();
        iVar13 = iVar13 + -1;
      } while (iVar13 != -1);
      local_74 = (undefined4 ******)0x0;
      local_70 = 0;
      if (_g_Telemetry == (IThreadPool *)0x0) {
        local_3c = (IThreadPool *)0x0;
      }
      else {
        uVar11 = *(undefined4 *)(this + 0x14);
        *(char **)((int)local_c4 + iVar6 + 0xc) = "DoExecute %s";
        *(undefined4 **)((int)local_c4 + iVar6 + 8) = &DoExecute()::tm_fmt;
        *(undefined4 *)((int)local_c4 + iVar6 + 4) = 0x3a9;
        *(char **)((int)local_c4 + iVar6) = "/data/src/public/vstdlib/jobthread.h";
        *(undefined4 *)((int)local_c4 + iVar6 + 0x10) = uVar11;
        *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
        *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
        *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
        *(undefined4 *)((int)local_d4 + iVar6) = 0;
        *(undefined4 *******)((int)local_d4 + iVar6 + -4) = &local_74;
        *(IThreadPool **)((int)&local_dc + iVar6) = _g_Telemetry;
        pCVar2 = *(CGameClient **)(_g_Telemetry + 0x50);
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200d6e;
        (*(code *)pCVar2)();
        local_3c = _g_Telemetry;
      }
      local_44 = local_74;
      uVar14 = *(uint *)(this + 0x10);
      local_40 = local_70;
      if (*(uint *)(this + 0xc) < uVar14) {
        pcVar3 = *(code **)(this + 4);
        if (pcVar3 != (code *)0x0) {
                    /* try { // try from 00200d94 to 00200dc0 has its CatchHandler @ 002013a4 */
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200d96;
          (*pcVar3)();
          uVar14 = *(uint *)(this + 0x10);
        }
        while( true ) {
          LOCK();
          uVar1 = *(uint *)local_9c;
          *(uint *)local_9c = *(uint *)local_9c + 4;
          UNLOCK();
          if (uVar14 <= uVar1) break;
          *(uint *)((int)&local_dc + iVar6) = uVar1;
          pcVar3 = *(code **)this;
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200da5;
          (*pcVar3)();
        }
        pcVar3 = *(code **)(this + 8);
        if (pcVar3 != (code *)0x0) {
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200dc1;
          (*pcVar3)();
        }
      }
      pIVar15 = local_3c;
      pppppuVar9 = local_44;
      if (local_3c != (IThreadPool *)0x0) {
        *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
        uVar14 = local_40;
        *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
        *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
        *(IThreadPool **)((int)&local_dc + iVar6) = pIVar15;
        *(undefined4 ******)((int)local_d4 + iVar6 + -4) = pppppuVar9;
        *(uint *)((int)local_d4 + iVar6) = uVar14;
        pCVar2 = *(CGameClient **)(pIVar15 + 0x54);
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200df4;
        (*(code *)pCVar2)();
      }
      iVar13 = 0;
      do {
        piVar5 = *(int **)(local_90 + iVar13 * 4);
        iVar12 = piVar5[3];
        if ((iVar12 - 1U < 2) || (iVar12 == 4)) {
          local_6c = 0;
          local_68 = 0;
          if (_g_Telemetry == (IThreadPool *)0x0) {
            local_30 = (IThreadPool *)0x0;
          }
          else {
            local_9c = *(CParallelProcessor<CGameClient*,CFuncJobItemProcessor<CGameClient*>,1> **)
                        (_g_Telemetry + 0x50);
            local_94 = *(CGameClient **)(_g_Telemetry + 0x14);
            iVar4 = *piVar5;
            *(int **)((int)&local_dc + iVar6) = piVar5;
                    /* try { // try from 00200e32 to 00200eaf has its CatchHandler @ 002013b7 */
            pcVar3 = *(code **)(iVar4 + 0x10);
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200e35;
            uVar11 = (*pcVar3)();
            *(undefined4 *)((int)local_d4 + iVar6 + -4) = uVar11;
            *(IThreadPool **)((int)&local_dc + iVar6) = _g_Telemetry;
            pCVar2 = local_94;
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200e49;
            uVar11 = (*(code *)pCVar2)();
            *(undefined4 *)((int)local_b0 + iVar6) = uVar11;
            pCVar7 = local_9c;
            *(undefined4 **)((int)local_d4 + iVar6 + -4) = &local_6c;
            *(int *)((int)local_b0 + iVar6 + 4) = iVar12;
            *(char **)((int)local_c4 + iVar6 + 0x10) = "Abort";
            *(char **)((int)local_c4 + iVar6 + 0xc) = "%s %s %d";
            *(undefined4 **)((int)local_c4 + iVar6 + 8) = &CJob::Abort(bool)::tm_fmt;
            *(undefined4 *)((int)local_c4 + iVar6 + 4) = 0x52d;
            *(char **)((int)local_c4 + iVar6) = "/data/src/public/vstdlib/jobthread.h";
            *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
            *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
            *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
            *(undefined4 *)((int)local_d4 + iVar6) = 0;
            *(IThreadPool **)((int)&local_dc + iVar6) = _g_Telemetry;
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200eb0;
            (*(code *)pCVar7)();
            local_30 = _g_Telemetry;
          }
          uVar8 = local_68;
          uVar11 = local_6c;
          *(int **)((int)&local_dc + iVar6) = piVar5 + 5;
          local_38 = uVar11;
          local_34 = uVar8;
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200ed0;
          pthread_mutex_lock(*(pthread_mutex_t **)((int)&local_dc + iVar6));
          puVar10 = (undefined4 *)*piVar5;
          *(int **)((int)&local_dc + iVar6) = piVar5;
                    /* try { // try from 00200ed5 to 00200ef3 has its CatchHandler @ 002013b3 */
          pcVar3 = (code *)*puVar10;
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200ed7;
          (*pcVar3)();
          if ((piVar5[3] == 1) || (piVar5[3] == 4)) {
            local_44 = (undefined4 ******)0x0;
            local_40 = 0;
            if (_g_Telemetry == (IThreadPool *)0x0) {
              local_24 = (IThreadPool *)0x0;
            }
            else {
              *(char **)((int)local_c4 + iVar6 + 0xc) = "CJob::DoAbort";
              *(undefined4 **)((int)local_c4 + iVar6 + 8) = &CJob::Abort(bool)::tm_fmt;
              *(undefined4 *)((int)local_c4 + iVar6 + 4) = 0x539;
              *(char **)((int)local_c4 + iVar6) = "/data/src/public/vstdlib/jobthread.h";
              *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
              *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
              *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
              *(undefined4 *)((int)local_d4 + iVar6) = 0;
              *(undefined4 *******)((int)local_d4 + iVar6 + -4) = &local_44;
              *(IThreadPool **)((int)&local_dc + iVar6) = _g_Telemetry;
                    /* try { // try from 00200fd5 to 00200fd7 has its CatchHandler @ 002013b3 */
              pCVar2 = *(CGameClient **)(_g_Telemetry + 0x50);
              *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200fd8;
              (*(code *)pCVar2)();
              local_24 = _g_Telemetry;
            }
            iVar12 = *piVar5;
            local_2c = local_44;
            local_28 = local_40;
            *(undefined4 *)((int)local_d4 + iVar6 + -4) = 1;
            *(int **)((int)&local_dc + iVar6) = piVar5;
                    /* try { // try from 00200ffa to 00201012 has its CatchHandler @ 0020133c */
            pcVar3 = *(code **)(iVar12 + 0x1c);
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200ffd;
            iVar12 = (*pcVar3)();
            piVar5[3] = iVar12;
            iVar12 = *piVar5;
            *(int **)((int)&local_dc + iVar6) = piVar5;
            pcVar3 = *(code **)(iVar12 + 0x20);
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x201008;
            (*pcVar3)();
            *(int **)((int)&local_dc + iVar6) = piVar5 + 0x11;
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x201013;
            CThreadEvent::Set();
            pIVar15 = local_24;
            pppppuVar9 = local_2c;
            if (local_24 != (IThreadPool *)0x0) {
              *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
              uVar14 = local_28;
              *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
              *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
              *(IThreadPool **)((int)&local_dc + iVar6) = pIVar15;
              *(undefined4 ******)((int)local_d4 + iVar6 + -4) = pppppuVar9;
              *(uint *)((int)local_d4 + iVar6) = uVar14;
              pCVar2 = *(CGameClient **)(pIVar15 + 0x54);
              *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x20104a;
              (*(code *)pCVar2)();
            }
          }
          iVar12 = *piVar5;
          *(int **)((int)&local_dc + iVar6) = piVar5;
          pcVar3 = *(code **)(iVar12 + 4);
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200ef4;
          (*pcVar3)();
          *(int **)((int)&local_dc + iVar6) = piVar5 + 5;
          *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200efc;
          pthread_mutex_unlock(*(pthread_mutex_t **)((int)&local_dc + iVar6));
          pIVar15 = local_30;
          uVar11 = local_38;
          if (local_30 != (IThreadPool *)0x0) {
            *(undefined4 *)((int)local_d4 + iVar6 + 0xc) = 0;
            uVar8 = local_34;
            *(undefined4 *)((int)local_d4 + iVar6 + 8) = 0;
            *(undefined4 *)((int)local_d4 + iVar6 + 4) = 0;
            *(IThreadPool **)((int)&local_dc + iVar6) = pIVar15;
            *(undefined4 *)((int)local_d4 + iVar6 + -4) = uVar11;
            *(undefined4 *)((int)local_d4 + iVar6) = uVar8;
            pCVar2 = *(CGameClient **)(pIVar15 + 0x54);
            *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200f2f;
            (*(code *)pCVar2)();
          }
        }
        iVar12 = *piVar5;
        *(int **)((int)&local_dc + iVar6) = piVar5;
                    /* try { // try from 00200f34 to 00200f36 has its CatchHandler @ 002013b7 */
        pcVar3 = *(code **)(iVar12 + 4);
        *(undefined4 *)((int)&uStack_e0 + iVar6) = 0x200f37;
        (*pcVar3)();
        iVar13 = iVar13 + 1;
        ppIVar17 = (IThreadPool **)((int)&local_dc + iVar6);
      } while (iVar13 != local_98);
    }
    pIVar15 = local_54;
    pppppuVar9 = local_5c;
    if (local_54 != (IThreadPool *)0x0) {
      ppIVar17[5] = (IThreadPool *)0x0;
      uVar14 = local_58;
      ppIVar17[4] = (IThreadPool *)0x0;
      ppIVar17[3] = (IThreadPool *)0x0;
      *ppIVar17 = pIVar15;
      ppIVar17[1] = (IThreadPool *)pppppuVar9;
      ppIVar17[2] = (IThreadPool *)uVar14;
      pCVar2 = *(CGameClient **)(pIVar15 + 0x54);
      ppIVar17[-1] = (IThreadPool *)0x201197;
      (*(code *)pCVar2)();
    }
  }
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined1 **)((int)ppIVar17 + -4) = &LAB_002013a4;
    __stack_chk_fail();
  }
  return;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)