int pthread_atfork(__prepare *__prepare,__parent *__parent,__child *__child)

{
  undefined4 *puVar1;
  undefined4 *puVar2;
  int iVar3;
  int *piVar4;
  
  puVar2 = (undefined4 *)malloc(0x18)   //possible issue identified - semgrep
  iVar3 = 0xc;
  if (puVar2 != (undefined4 *)0x0) {
    pthread_mutex_lock((pthread_mutex_t *)&DAT_000317f0);
    if (__prepare != (__prepare *)0x0) {
      *puVar2 = __prepare;
      puVar1 = puVar2;
      puVar2[1] = DAT_00031808;
      DAT_00031808 = puVar1;
    }
    if (__parent != (__parent *)0x0) {
      piVar4 = &DAT_00031810;
      for (iVar3 = DAT_00031810; iVar3 != 0; iVar3 = *(int *)(iVar3 + 4)) {
        piVar4 = (int *)(iVar3 + 4);
      }
      puVar2[2] = __parent;
      puVar2[3] = *piVar4;
      *piVar4 = (int)(puVar2 + 2);
    }
    if (__child != (__child *)0x0) {
      piVar4 = &DAT_0003180c;
      for (iVar3 = DAT_0003180c; iVar3 != 0; iVar3 = *(int *)(iVar3 + 4)) {
        piVar4 = (int *)(iVar3 + 4);
      }
      puVar2[4] = __child;
      puVar2[5] = *piVar4;
      *piVar4 = (int)(puVar2 + 4);
    }
    pthread_mutex_unlock((pthread_mutex_t *)&DAT_000317f0);
    iVar3 = 0;
  }
  return iVar3;
}