int pthread_detach(pthread_t __th)
{
char cVar1;
int iVar2;
int *piVar3;
undefined1 *puVar4;
pthread_t pVar5;
undefined4 local_b0;
undefined4 local_ac;
pthread_t local_a8;
iVar2 = (__th & 0x3ff) * 0x10;
puVar4 = __pthread_handles + iVar2;
__pthread_lock(puVar4,0);
iVar2 = *(int *)(__pthread_handles + iVar2 + 8);
if ((iVar2 == 0) || (pVar5 = *(pthread_t *)(iVar2 + 0x10), pVar5 != __th)) {
__pthread_unlock(puVar4);
iVar2 = 3;
}
else if (*(char *)(iVar2 + 0x2d) == '\0') {
if (*(int *)(iVar2 + 0x38) == 0) {
cVar1 = *(char *)(iVar2 + 0x2c) //possible issue identified - semgrep
*(undefined1 *)(iVar2 + 0x2d) = 1;
__pthread_unlock(puVar4);
if (cVar1 != '\0') {
if (-1 < __pthread_manager_request) {
local_b0 = (*(code *)0x49ec)();
local_ac = 1;
local_a8 = pVar5;
do {
iVar2 = __libc_write(__pthread_manager_request,&local_b0,0x94);
if (iVar2 != -1) break;
piVar3 = __errno_location();
} while (*piVar3 == 4);
}
}
}
else {
__pthread_unlock(puVar4);
}
iVar2 = 0;
}
else {
__pthread_unlock(puVar4);
iVar2 = 0x16;
}
return iVar2;
}