diff options
| author | nagachika <nagachika@ruby-lang.org> | 2023-07-29 17:58:42 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2023-07-29 17:58:42 +0900 |
| commit | 1c7624469880bcb964be09a49e4907873f45b026 (patch) | |
| tree | 85e703a7403aaecd89a5d0dc8cbb5eeeb94deb4c | |
| parent | 8346d1630b8193eef1ec9dd537b16de74afdc2e8 (diff) | |
Revert "Ruby 3.2 - Speed up rebuilding the loaded feature index and realpath cache (#8023)"
This reverts commit 8346d1630b8193eef1ec9dd537b16de74afdc2e8.
It seems break CI on MinGW.
https://github.com/ruby/ruby/actions/runs/5698775895/job/15447455988
| -rw-r--r-- | load.c | 47 | ||||
| -rw-r--r-- | vm.c | 2 | ||||
| -rw-r--r-- | vm_core.h | 1 |
3 files changed, 6 insertions, 44 deletions
@@ -164,12 +164,6 @@ get_loaded_features_realpaths(rb_vm_t *vm) } 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) { return get_loaded_features(GET_VM()); @@ -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; @@ -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; @@ -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) { @@ -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); @@ -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; @@ -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 { @@ -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; @@ -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); @@ -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); @@ -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); @@ -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 |
