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;
}