Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fork actions must not allocate #593

Merged
merged 2 commits into from
Jul 28, 2023
Merged

Commits on Jul 28, 2023

  1. Fix compiler warning

    talex5 committed Jul 28, 2023
    Configuration menu
    Copy the full SHA
    95a58dc View commit details
    Browse the repository at this point in the history
  2. Fork actions must not allocate

    The `execve` action allocated the arrays in the forked child process.
    However, in a multi-threaded program we might have forked while another
    thread had the malloc lock. In that case, the child would wait forever
    because it inherited the locked mutex but not the thread that would
    unlock it. e.g.
    
        #0  futex_wait (private=0, expected=2, futex_word=0xffff9509cb10 <main_arena>) at ../sysdeps/nptl/futex-internal.h:146
        ocaml-multicore#1  __GI___lll_lock_wait_private (futex=futex@entry=0xffff9509cb10 <main_arena>) at ./nptl/lowlevellock.c:34
        ocaml-multicore#2  0x0000ffff94f8e780 in __libc_calloc (n=<optimized out>, elem_size=<optimized out>) at ./malloc/malloc.c:3650
        ocaml-multicore#3  0x0000aaaac67cfa68 in make_string_array (errors=errors@entry=37, v_array=281472912006504) at fork_action.c:47
        ocaml-multicore#4  0x0000aaaac67cfaf4 in action_execve (errors=37, v_config=281472912003024) at fork_action.c:61
        ocaml-multicore#5  0x0000aaaac67cf93c in eio_unix_run_fork_actions (errors=errors@entry=37, v_actions=281472912002960) at fork_action.c:19
    talex5 committed Jul 28, 2023
    Configuration menu
    Copy the full SHA
    5d8a48c View commit details
    Browse the repository at this point in the history