summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'process.c')
-rw-r--r--process.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/process.c b/process.c
index acb5b66156..88b55ed335 100644
--- a/process.c
+++ b/process.c
@@ -4227,12 +4227,17 @@ rb_fork_ruby(int *status)
prefork();
before_fork_ruby();
+ rb_thread_acquire_fork_lock();
disable_child_handler_before_fork(&old);
child.pid = pid = rb_fork();
child.error = err = errno;
disable_child_handler_fork_parent(&old); /* yes, bad name */
+ rb_thread_release_fork_lock();
+ if (pid == 0) {
+ rb_thread_reset_fork_lock();
+ }
after_fork_ruby(pid);
/* repeat while fork failed but retryable */