Skip to content

Commit 88b5287

Browse files
committed
re-implement free/memsize for rb_namespace_t correctly
1 parent 9361af6 commit 88b5287

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

namespace.c

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -186,27 +186,32 @@ rb_namespace_entry_mark(void *ptr)
186186
rb_gc_mark(ns->gvar_tbl);
187187
}
188188

189-
// TODO: implemente namespace_entry_free to free loading_table etc
190-
/*
191189
static int
192190
free_loading_table_entry(st_data_t key, st_data_t value, st_data_t arg)
193191
{
194192
xfree((char *)key);
195193
return ST_DELETE;
196194
}
197-
if (vm->loading_table) {
198-
st_foreach(vm->loading_table, free_loading_table_entry, 0);
199-
st_free_table(vm->loading_table);
200-
vm->loading_table = 0;
201-
}
202-
*/
203-
#define namespace_entry_free RUBY_TYPED_DEFAULT_FREE
195+
196+
static void
197+
namespace_entry_free(void *ptr)
198+
{
199+
rb_namespace_t *ns = (rb_namespace_t *)ptr;
200+
if (ns->loading_table) {
201+
st_foreach(ns->loading_table, free_loading_table_entry, 0);
202+
st_free_table(ns->loading_table);
203+
ns->loading_table = 0;
204+
}
205+
xfree(ptr);
206+
}
204207

205208
static size_t
206209
namespace_entry_memsize(const void *ptr)
207210
{
208-
// TODO: rb_st_memsize(loaded_features_index) + rb_st_memsize(vm->loading_table)
209-
return sizeof(rb_namespace_t);
211+
const rb_namespace_t *ns = (const rb_namespace_t *)ptr;
212+
return sizeof(rb_namespace_t) + \
213+
rb_st_memsize(ns->loaded_features_index) + \
214+
rb_st_memsize(ns->loading_table);
210215
}
211216

212217
const rb_data_type_t rb_namespace_data_type = {

0 commit comments

Comments
 (0)