Short-circuit Process._fork
This commit is contained in:
parent
844a0edbae
commit
b2205cd45c
Notes:
git
2022-08-12 16:58:29 +09:00
31
process.c
31
process.c
@ -4328,12 +4328,30 @@ rb_fork_ruby(int *status)
|
|||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static rb_pid_t
|
||||||
|
proc_fork_pid(void)
|
||||||
|
{
|
||||||
|
rb_pid_t pid = rb_fork_ruby(NULL);
|
||||||
|
|
||||||
|
if (pid == -1) {
|
||||||
|
rb_sys_fail("fork(2)");
|
||||||
|
}
|
||||||
|
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
rb_pid_t
|
rb_pid_t
|
||||||
rb_call_proc__fork(void)
|
rb_call_proc__fork(void)
|
||||||
{
|
{
|
||||||
VALUE pid = rb_funcall(rb_mProcess, rb_intern("_fork"), 0);
|
ID id__fork;
|
||||||
|
CONST_ID(id__fork, "_fork");
|
||||||
return NUM2PIDT(pid);
|
if (rb_method_basic_definition_p(CLASS_OF(rb_mProcess), id__fork)) {
|
||||||
|
return proc_fork_pid();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
VALUE pid = rb_funcall(rb_mProcess, id__fork, 0);
|
||||||
|
return NUM2PIDT(pid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -4360,12 +4378,7 @@ rb_call_proc__fork(void)
|
|||||||
VALUE
|
VALUE
|
||||||
rb_proc__fork(VALUE _obj)
|
rb_proc__fork(VALUE _obj)
|
||||||
{
|
{
|
||||||
rb_pid_t pid = rb_fork_ruby(NULL);
|
rb_pid_t pid = proc_fork_pid();
|
||||||
|
|
||||||
if (pid == -1) {
|
|
||||||
rb_sys_fail("fork(2)");
|
|
||||||
}
|
|
||||||
|
|
||||||
return PIDT2NUM(pid);
|
return PIDT2NUM(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user