/* WARNING: Unknown calling convention -- yet parameter storage is locked */

__pid_t fork(void)

{
  int iVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  pthread_mutexattr_t apStack_20 [3];
  
  pthread_mutex_lock((pthread_mutex_t *)&DAT_000317f0);
  puVar3 = DAT_00031810;
  puVar4 = DAT_0003180c;
  for (puVar2 = DAT_00031808; puVar2 != (undefined4 *)0x0; puVar2 = (undefined4 *)puVar2[1]) {
    (*(code *)*puVar2)();
  }
  __pthread_once_fork_prepare();
  pthread_mutex_lock((pthread_mutex_t *)&__malloc_lock);
  iVar1 = __libc_fork()   //possible issue identified - semgrep
  if (iVar1 == 0) {
    pthread_mutexattr_init(apStack_20);
    pthread_mutexattr_settype(apStack_20,1);
    pthread_mutex_init((pthread_mutex_t *)&__malloc_lock,apStack_20);
    pthread_mutexattr_destroy(apStack_20);
    pthread_mutexattr_init(apStack_20);
    pthread_mutexattr_settype(apStack_20,0);
    pthread_mutex_init((pthread_mutex_t *)&DAT_000317f0,apStack_20);
    pthread_mutexattr_destroy(apStack_20);
    __pthread_reset_main_thread()   //possible issue identified - semgrep
    __fresetlockfiles();
    __pthread_once_fork_child();
    for (; puVar4 != (undefined4 *)0x0; puVar4 = (undefined4 *)puVar4[1]) {
      (*(code *)*puVar4)();
    }
  }
  else {
    pthread_mutex_unlock((pthread_mutex_t *)&__malloc_lock);
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_000317f0);
    __pthread_once_fork_parent();
    for (; puVar3 != (undefined4 *)0x0; puVar3 = (undefined4 *)puVar3[1]) {
      (*(code *)*puVar3)();
    }
  }
  return iVar1;
}