diff options
author | Jean Boussier <byroot@ruby-lang.org> | 2023-11-22 10:27:46 +0100 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2023-11-22 13:04:21 +0100 |
commit | 9ae6ee5a59e74e629f73222938b53a6eae8d2ded (patch) | |
tree | d9a59c2ab4af56719727863ae77b9de075658a8f /process.c | |
parent | cdc578ee008775e022f63fc9d567c92c59202505 (diff) | |
download | ruby-9ae6ee5a59e74e629f73222938b53a6eae8d2ded.tar.gz |
Embed exec_arg objects
They are very ephemeral, so avoiding the malloc churn
is desirable.
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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); } |