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