summaryrefslogtreecommitdiff
path: root/vm_method.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-20 15:15:44 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-20 15:15:44 +0000
commit3728ec6ea36941f5d634bc2abb352ea145fb749c (patch)
tree30989692628f3875ac28695a08003fda07897fd7 /vm_method.c
parentef3ea2dd898e51038989f9f762daaccb34f51715 (diff)
* vm_method.c (rb_add_method_def): decrement alias count of
rb_method_definition_t to prevent memory leak. see [ruby-dev:41021]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27421 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_method.c')
-rw-r--r--vm_method.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/vm_method.c b/vm_method.c
index 04b62f2c9d..c9d99db329 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -215,6 +215,14 @@ rb_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definiti
* another problem when the usage is changed.
*/
me = old_me;
+
+ if (me->def) {
+ if (me->def->alias_count == 0)
+ xfree(me->def);
+ else if (me->def->alias_count > 0)
+ me->def->alias_count--;
+ me->def = 0;
+ }
}
else {
me = ALLOC(rb_method_entry_t);