Avoid traversing ocaml objects when not holding the runtime lock in spawn_unix
#63
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Copy
sigprocmaskinto C data structures before releasing the runtime lock inspawn_unix.This fixes a possible bad interaction with the GC. When the runtime lock isn't held by the current thread, another OCaml thread could run the GC and thus move around OCaml heap objects.
The PR takes the approach described in the C FFI section of the OCaml manual:
("entering a blocking section" is the same thing as "releasing the runtime system".)