/* WARNING: Heritage AFTER dead removal. Example location: r0x00031400 : 0x000156a8 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

void FUN_00015544(void)

{
  char cVar1;
  int iVar2;
  undefined4 *puVar3;
  undefined4 uVar4;
  uint __sig;
  undefined4 *puVar5;
  uint local_30 [2];
  
  do {
    iVar2 = __libc_waitpid(0xffffffff,local_30,0x80000001);
    if (iVar2 < 1) {
      return;
    }
    puVar3 = *(undefined4 **)__pthread_main_thread;
    do {
      puVar5 = puVar3;
      if (puVar5 == (undefined4 *)__pthread_main_thread) goto LAB_00015654;
      puVar3 = (undefined4 *)*puVar5;
    } while (puVar5[5] != iVar2);
    puVar3[1] = puVar5[1];
    uVar4 = puVar5[7];
    *(undefined4 **)puVar5[1] = puVar3;
    __pthread_lock(uVar4,0);
    *(undefined1 *)((int)puVar5 + 0x2e) = 1;
    if ((puVar5[0x67] != 0) && (((__pthread_threads_events | puVar5[0x68]) & 0x800) != 0)) {
      puVar5[0x6a] = 0xc;
      puVar5[0x6b] = puVar5;
      __pthread_last_event = puVar5;
      __linuxthreads_reap_event();
    }
    cVar1 = *(char *)((int)puVar5 + 0x2d)   //possible issue identified - semgrep
    __pthread_unlock(puVar5[7]);
    if (cVar1 != '\0') {
      (*(code *)0x5420)(puVar5);
    }
LAB_00015654:
    if ((DAT_000317b4 != 0) && (*(undefined **)__pthread_main_thread == __pthread_main_thread)) {
      __pthread_restart_new();
    }
    __sig = local_30[0] & 0x7f;
    if (0 < (int)((__sig + 1) * 0x1000000) >> 0x19) {
      for (puVar3 = *(undefined4 **)__pthread_main_thread;
          puVar3 != (undefined4 *)__pthread_main_thread; puVar3 = (undefined4 *)*puVar3) {
        kill(puVar3[5],__sig);
      }
      kill(puVar3[5],__sig);
                    /* WARNING: Subroutine does not return */
      _exit(0);
    }
  } while( true );
}