summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2025-10-21 16:49:10 -0400
committerPeter Zhu <peter@peterzhu.ca>2025-10-21 20:21:45 -0400
commitf46ebed2ff66a88e82556f08054932b817bbcfad (patch)
tree255d7fb9a9804f975aba8c5bf590b86e9d956ef0
parenta2a107c2d7e32d31f4e6bb17466b3ddfdbe315a3 (diff)
Fix memory leak of darray in loaded_features_index
-rw-r--r--depend1
-rw-r--r--namespace.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/depend b/depend
index 1f9f0c31eb..fa61de77a0 100644
--- a/depend
+++ b/depend
@@ -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);
}
}