int pthread_cancel(pthread_t __th)
{
char cVar1;
int iVar2;
undefined4 *puVar3;
int iVar4;
undefined1 *puVar5;
__pid_t __pid;
iVar2 = (__th & 0x3ff) * 0x10;
puVar5 = __pthread_handles + iVar2;
__pthread_lock(puVar5,0);
iVar2 = *(int *)(__pthread_handles + iVar2 + 8);
if ((iVar2 == 0) || (*(pthread_t *)(iVar2 + 0x10) != __th)) {
__pthread_unlock(puVar5);
iVar2 = 3;
}
else {
cVar1 = *(char *)(iVar2 + 0x42) //possible issue identified - semgrep
*(undefined1 *)(iVar2 + 0x42) = 1;
if ((*(char *)(iVar2 + 0x40) == '\x01') || (cVar1 != '\0')) {
__pthread_unlock(puVar5);
}
else {
puVar3 = *(undefined4 **)(iVar2 + 0x1bc);
__pid = *(__pid_t *)(iVar2 + 0x14);
iVar4 = 0;
if (puVar3 != (undefined4 *)0x0) {
iVar4 = (*(code *)puVar3[1])(*puVar3,iVar2);
*(char *)(iVar2 + 0x1b8) = (char)iVar4;
}
__pthread_unlock(puVar5);
if (iVar4 == 0) {
kill(__pid,__pthread_sig_cancel);
}
else {
__pthread_restart_new(iVar2);
}
}
iVar2 = 0;
}
return iVar2;
}