Skip to content

Commit

Permalink
Revert "Ruby 3.2 - Speed up rebuilding the loaded feature index and r…
Browse files Browse the repository at this point in the history
…ealpath cache (#8023)"

This reverts commit 8346d16.
It seems break CI on MinGW.
https://github.com/ruby/ruby/actions/runs/5698775895/job/15447455988
  • Loading branch information
nagachika committed Jul 29, 2023
1 parent 8346d16 commit 1c76244
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 44 deletions.
47 changes: 6 additions & 41 deletions load.c
Expand Up @@ -163,12 +163,6 @@ get_loaded_features_realpaths(rb_vm_t *vm)
return vm->loaded_features_realpaths;
}

static VALUE
get_loaded_features_realpath_map(rb_vm_t *vm)
{
return vm->loaded_features_realpath_map;
}

static VALUE
get_LOADED_FEATURES(ID _x, VALUE *_y)
{
Expand Down Expand Up @@ -367,10 +361,7 @@ get_loaded_features_index(rb_vm_t *vm)
st_foreach(vm->loaded_features_index, loaded_features_index_clear_i, 0);

VALUE realpaths = vm->loaded_features_realpaths;
VALUE realpath_map = vm->loaded_features_realpath_map;
VALUE previous_realpath_map = rb_hash_dup(realpath_map);
rb_hash_clear(realpaths);
rb_hash_clear(realpath_map);
features = vm->loaded_features;
for (i = 0; i < RARRAY_LEN(features); i++) {
VALUE entry, as_str;
Expand All @@ -387,14 +378,9 @@ get_loaded_features_index(rb_vm_t *vm)
long j = RARRAY_LEN(features);
for (i = 0; i < j; i++) {
VALUE as_str = rb_ary_entry(features, i);
VALUE realpath = rb_hash_aref(previous_realpath_map, as_str);
if (NIL_P(realpath)) {
realpath = rb_check_realpath(Qnil, as_str, NULL);
if (NIL_P(realpath)) realpath = as_str;
realpath = rb_fstring(realpath);
}
rb_hash_aset(realpaths, realpath, Qtrue);
rb_hash_aset(realpath_map, as_str, realpath);
VALUE realpath = rb_check_realpath(Qnil, as_str, NULL);
if (NIL_P(realpath)) realpath = as_str;
rb_hash_aset(realpaths, rb_fstring(realpath), Qtrue);
}
}
return vm->loaded_features_index;
Expand Down Expand Up @@ -689,19 +675,6 @@ rb_provide(const char *feature)

NORETURN(static void load_failed(VALUE));

static inline VALUE
realpath_internal_cached(VALUE hash, VALUE path)
{
VALUE ret = rb_hash_aref(hash, path);
if(RTEST(ret)) {
return ret;
}

VALUE realpath = rb_realpath_internal(Qnil, path, 1);
rb_hash_aset(hash, rb_fstring(path), rb_fstring(realpath));
return realpath;
}

static inline void
load_iseq_eval(rb_execution_context_t *ec, VALUE fname)
{
Expand All @@ -714,12 +687,8 @@ load_iseq_eval(rb_execution_context_t *ec, VALUE fname)
VALUE parser = rb_parser_new();
rb_parser_set_context(parser, NULL, FALSE);
ast = (rb_ast_t *)rb_parser_load_file(parser, fname);

rb_thread_t *th = rb_ec_thread_ptr(ec);
VALUE realpath_map = get_loaded_features_realpath_map(th->vm);

iseq = rb_iseq_new_top(&ast->body, rb_fstring_lit("<top (required)>"),
fname, realpath_internal_cached(realpath_map, fname), NULL);
fname, rb_realpath_internal(Qnil, fname, 1), NULL);
rb_ast_dispose(ast);
rb_vm_pop_frame(ec);
RB_GC_GUARD(v);
Expand Down Expand Up @@ -1192,7 +1161,6 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa
volatile VALUE saved_path;
volatile VALUE realpath = 0;
VALUE realpaths = get_loaded_features_realpaths(th->vm);
VALUE realpath_map = get_loaded_features_realpath_map(th->vm);
volatile bool reset_ext_config = false;
struct rb_ext_config prev_ext_config;

Expand Down Expand Up @@ -1226,7 +1194,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa
}
#endif
else if (RTEST(rb_hash_aref(realpaths,
realpath = realpath_internal_cached(realpath_map, path)))) {
realpath = rb_realpath_internal(Qnil, path, 1)))) {
result = 0;
}
else {
Expand Down Expand Up @@ -1284,8 +1252,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa
rb_provide_feature(th2->vm, path);
VALUE real = realpath;
if (real) {
real = rb_fstring(real);
rb_hash_aset(realpaths, real, Qtrue);
rb_hash_aset(realpaths, rb_fstring(real), Qtrue);
}
}
ec->errinfo = saved.errinfo;
Expand Down Expand Up @@ -1506,8 +1473,6 @@ Init_load(void)
vm->loaded_features_index = st_init_numtable();
vm->loaded_features_realpaths = rb_hash_new();
rb_obj_hide(vm->loaded_features_realpaths);
vm->loaded_features_realpath_map = rb_hash_new();
rb_obj_hide(vm->loaded_features_realpath_map);

rb_define_global_function("load", rb_f_load, -1);
rb_define_global_function("require", rb_f_require, 1);
Expand Down
2 changes: 0 additions & 2 deletions vm.c
Expand Up @@ -2703,7 +2703,6 @@ rb_vm_update_references(void *ptr)
vm->loaded_features = rb_gc_location(vm->loaded_features);
vm->loaded_features_snapshot = rb_gc_location(vm->loaded_features_snapshot);
vm->loaded_features_realpaths = rb_gc_location(vm->loaded_features_realpaths);
vm->loaded_features_realpath_map = rb_gc_location(vm->loaded_features_realpath_map);
vm->top_self = rb_gc_location(vm->top_self);
vm->orig_progname = rb_gc_location(vm->orig_progname);

Expand Down Expand Up @@ -2795,7 +2794,6 @@ rb_vm_mark(void *ptr)
rb_gc_mark_movable(vm->loaded_features);
rb_gc_mark_movable(vm->loaded_features_snapshot);
rb_gc_mark_movable(vm->loaded_features_realpaths);
rb_gc_mark_movable(vm->loaded_features_realpath_map);
rb_gc_mark_movable(vm->top_self);
rb_gc_mark_movable(vm->orig_progname);
RUBY_MARK_MOVABLE_UNLESS_NULL(vm->coverages);
Expand Down
1 change: 0 additions & 1 deletion vm_core.h
Expand Up @@ -680,7 +680,6 @@ typedef struct rb_vm_struct {
VALUE loaded_features;
VALUE loaded_features_snapshot;
VALUE loaded_features_realpaths;
VALUE loaded_features_realpath_map;
struct st_table *loaded_features_index;
struct st_table *loading_table;
#if EXTSTATIC
Expand Down

0 comments on commit 1c76244

Please sign in to comment.