From 9ae6ee5a59e74e629f73222938b53a6eae8d2ded Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Wed, 22 Nov 2023 10:27:46 +0100 Subject: Embed exec_arg objects They are very ephemeral, so avoiding the malloc churn is desirable. --- process.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index aa213ba53c..4dc2325f80 100644 --- a/process.c +++ b/process.c @@ -1836,7 +1836,7 @@ memsize_exec_arg(const void *ptr) static const rb_data_type_t exec_arg_data_type = { "exec_arg", {mark_exec_arg, RUBY_TYPED_DEFAULT_FREE, memsize_exec_arg}, - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE }; #ifdef _WIN32 @@ -2780,6 +2780,7 @@ rb_execarg_setenv(VALUE execarg_obj, VALUE env) struct rb_execarg *eargp = rb_execarg_get(execarg_obj); env = !NIL_P(env) ? rb_check_exec_env(env, &eargp->path_env) : Qfalse; eargp->env_modification = env; + RB_GC_GUARD(execarg_obj); } static int @@ -2977,6 +2978,7 @@ execarg_parent_end(VALUE execarg_obj) } errno = err; + RB_GC_GUARD(execarg_obj); return execarg_obj; } @@ -4668,7 +4670,7 @@ do_spawn_process(VALUE arg) rb_execarg_parent_start1(argp->execarg); - return (VALUE)rb_spawn_process(DATA_PTR(argp->execarg), + return (VALUE)rb_spawn_process(rb_execarg_get(argp->execarg), argp->errmsg.ptr, argp->errmsg.buflen); } -- cgit v1.2.3