diff options
| author | U.Nakamura <usa@ruby-lang.org> | 2023-09-05 20:47:58 +0900 |
|---|---|---|
| committer | U.Nakamura <usa@ruby-lang.org> | 2023-09-05 20:48:57 +0900 |
| commit | 8a8d889ca2ba1ace8784e49e02a6616dd5765d9e (patch) | |
| tree | 33f71dd7f4465a01c31f50177af155a894699646 /vm.c | |
| parent | e88ffb885af222332826d46565ca405f4523ed8f (diff) | |
merge revision(s) 1f115f141dd17f75049a5e17107906c5bcc372e1: [Backport #19246]
Speed up rebuilding the loaded feature index
Rebuilding the loaded feature index slowed down with the bug fix
for #17885 in 79a4484a072e9769b603e7b4fbdb15b1d7eccb15. The
slowdown was extreme if realpath emulation was used, but even when
not emulated, it could be about 10x slower.
This adds loaded_features_realpath_map to rb_vm_struct. This is a
hidden hash mapping loaded feature paths to realpaths. When
rebuilding the loaded feature index, look at this hash to get
cached realpath values, and skip calling rb_check_realpath if a
cached value is found.
Fixes [Bug #19246]
---
load.c | 27 +++++++++++++++++++++++----
vm.c | 2 ++
vm_core.h | 1 +
3 files changed, 26 insertions(+), 4 deletions(-)
Diffstat (limited to 'vm.c')
| -rw-r--r-- | vm.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -2539,6 +2539,7 @@ 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); @@ -2630,6 +2631,7 @@ 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); |
