Merge rb_fork_ruby2
into rb_fork_ruby
This commit is contained in:
parent
7061359564
commit
566f2eb501
42
process.c
42
process.c
@ -4215,50 +4215,30 @@ rb_fork_async_signal_safe(int *status,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rb_pid_t
|
rb_pid_t
|
||||||
rb_fork_ruby2(struct rb_process_status *status)
|
rb_fork_ruby(int *status)
|
||||||
{
|
{
|
||||||
|
struct rb_process_status child = {.status = 0};
|
||||||
rb_pid_t pid;
|
rb_pid_t pid;
|
||||||
int try_gc = 1, err;
|
int try_gc = 1, err;
|
||||||
struct child_handler_disabler_state old;
|
struct child_handler_disabler_state old;
|
||||||
|
|
||||||
if (status) status->status = 0;
|
do {
|
||||||
|
|
||||||
while (1) {
|
|
||||||
prefork();
|
prefork();
|
||||||
|
|
||||||
before_fork_ruby();
|
before_fork_ruby();
|
||||||
disable_child_handler_before_fork(&old);
|
disable_child_handler_before_fork(&old);
|
||||||
{
|
|
||||||
pid = rb_fork();
|
child.pid = pid = rb_fork();
|
||||||
err = errno;
|
child.error = err = errno;
|
||||||
if (status) {
|
|
||||||
status->pid = pid;
|
|
||||||
status->error = err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
disable_child_handler_fork_parent(&old); /* yes, bad name */
|
disable_child_handler_fork_parent(&old); /* yes, bad name */
|
||||||
after_fork_ruby(pid);
|
after_fork_ruby(pid);
|
||||||
|
|
||||||
if (pid >= 0) { /* fork succeed */
|
/* repeat while fork failed but retryable */
|
||||||
return pid;
|
} while (pid < 0 && handle_fork_error(err, &child, NULL, &try_gc) == 0);
|
||||||
}
|
|
||||||
|
|
||||||
/* fork failed */
|
if (status) *status = child.status;
|
||||||
if (handle_fork_error(err, status, NULL, &try_gc)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rb_pid_t
|
|
||||||
rb_fork_ruby(int *status)
|
|
||||||
{
|
|
||||||
struct rb_process_status process_status = {0};
|
|
||||||
|
|
||||||
rb_pid_t pid = rb_fork_ruby2(&process_status);
|
|
||||||
|
|
||||||
if (status) *status = process_status.status;
|
|
||||||
|
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user