summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2024-06-10 10:02:05 -0400
committerPeter Zhu <peter@peterzhu.ca>2024-06-11 10:33:51 -0400
commit32683aa18db667ac740bc562eca5989640ae1612 (patch)
tree2fd4724f9d94d359d38f410756f634098c4a4ce6
parent89ebe8993fd3b7fec977eced1a46f54bcd75ae07 (diff)
Remove use of symbols and arrays when freeing global table
This removes the use of symbol and array objects when freeing the global table so we can now free symbols and arrays earlier.
-rw-r--r--gc.c9
-rw-r--r--variable.c4
2 files changed, 3 insertions, 10 deletions
diff --git a/gc.c b/gc.c
index f47f20fa57..17136e8d23 100644
--- a/gc.c
+++ b/gc.c
@@ -4316,13 +4316,8 @@ rb_objspace_free_objects_i(VALUE obj, void *data)
{
rb_objspace_t *objspace = (rb_objspace_t *)data;
- switch (BUILTIN_TYPE(obj)) {
- case T_NONE:
- case T_SYMBOL:
- break;
- default:
+ if (BUILTIN_TYPE(obj) != T_NONE) {
obj_free(objspace, obj);
- break;
}
}
@@ -4350,8 +4345,6 @@ rb_objspace_call_finalizer_i(VALUE obj, void *data)
case T_FILE:
obj_free(objspace, obj);
break;
- case T_SYMBOL:
- case T_ARRAY:
case T_NONE:
break;
default:
diff --git a/variable.c b/variable.c
index 657cbdc889..8be3d9fdb5 100644
--- a/variable.c
+++ b/variable.c
@@ -451,7 +451,7 @@ struct rb_global_entry {
};
static enum rb_id_table_iterator_result
-free_global_entry_i(ID key, VALUE val, void *arg)
+free_global_entry_i(VALUE val, void *arg)
{
struct rb_global_entry *entry = (struct rb_global_entry *)val;
if (entry->var->counter == 1) {
@@ -467,7 +467,7 @@ free_global_entry_i(ID key, VALUE val, void *arg)
void
rb_free_rb_global_tbl(void)
{
- rb_id_table_foreach(rb_global_tbl, free_global_entry_i, 0);
+ rb_id_table_foreach_values(rb_global_tbl, free_global_entry_i, 0);
rb_id_table_free(rb_global_tbl);
}