summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2025-09-02 15:24:13 +0200
committerPeter Zhu <peter@peterzhu.ca>2025-09-09 11:29:35 +0200
commitce94add7fbef17cbfa10de6a5554455542e1081c (patch)
treeb1f0064b0a51efa6fdc1b73f009449d3e88b40e2 /variable.c
parent5c98b899e6c1757e621b18d53a84c140109b7699 (diff)
Fix global variable counter for alias
If we alias two variable multiple times, for example like this: alias $foo $bar alias $foo $bar Then we will increment the counter for entry2->var->counter each time, which is not correct because we are not adding more references to entry2->var. This reports as a memory leak in RUBY_FREE_AT_EXIT because entry2->var->counter will never reach 0 and thus will never be freed.
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/variable.c b/variable.c
index ef35cf3990..b1782a01c8 100644
--- a/variable.c
+++ b/variable.c
@@ -1164,7 +1164,7 @@ rb_alias_variable(ID name1, ID name2)
free_global_variable(var);
}
}
- if (entry1) {
+ if (entry1->var != entry2->var) {
entry2->var->counter++;
entry1->var = entry2->var;
}