diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2025-10-21 16:49:10 -0400 |
|---|---|---|
| committer | Peter Zhu <peter@peterzhu.ca> | 2025-10-21 20:21:45 -0400 |
| commit | f46ebed2ff66a88e82556f08054932b817bbcfad (patch) | |
| tree | 255d7fb9a9804f975aba8c5bf590b86e9d956ef0 | |
| parent | a2a107c2d7e32d31f4e6bb17466b3ddfdbe315a3 (diff) | |
Fix memory leak of darray in loaded_features_index
| -rw-r--r-- | depend | 1 | ||||
| -rw-r--r-- | namespace.c | 11 |
2 files changed, 12 insertions, 0 deletions
@@ -9302,6 +9302,7 @@ namespace.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h namespace.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h namespace.$(OBJEXT): {$(VPATH)}config.h namespace.$(OBJEXT): {$(VPATH)}constant.h +namespace.$(OBJEXT): {$(VPATH)}darray.h namespace.$(OBJEXT): {$(VPATH)}debug_counter.h namespace.$(OBJEXT): {$(VPATH)}defines.h namespace.$(OBJEXT): {$(VPATH)}encoding.h diff --git a/namespace.c b/namespace.c index d4a990cb38..b85cbf5715 100644 --- a/namespace.c +++ b/namespace.c @@ -16,6 +16,7 @@ #include "ruby/internal/globals.h" #include "ruby/util.h" #include "vm_core.h" +#include "darray.h" #include <stdio.h> @@ -207,6 +208,15 @@ free_loading_table_entry(st_data_t key, st_data_t value, st_data_t arg) return ST_DELETE; } +static int +free_loaded_feature_index_i(st_data_t key, st_data_t value, st_data_t arg) +{ + if (!FIXNUM_P(value)) { + rb_darray_free((void *)value); + } + return ST_CONTINUE; +} + static void namespace_root_free(void *ptr) { @@ -218,6 +228,7 @@ namespace_root_free(void *ptr) } if (ns->loaded_features_index) { + st_foreach(ns->loaded_features_index, free_loaded_feature_index_i, 0); st_free_table(ns->loaded_features_index); } } |
