diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-20 15:15:44 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-20 15:15:44 +0000 |
commit | 3728ec6ea36941f5d634bc2abb352ea145fb749c (patch) | |
tree | 30989692628f3875ac28695a08003fda07897fd7 | |
parent | ef3ea2dd898e51038989f9f762daaccb34f51715 (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
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | vm_method.c | 8 |
2 files changed, 14 insertions, 0 deletions
@@ -1,3 +1,9 @@ +Wed Apr 21 00:01:05 2010 Yusuke Endoh <mame@tsg.ne.jp> + + * vm_method.c (rb_add_method_def): decrement alias count of + rb_method_definition_t to prevent memory leak. see + [ruby-dev:41021]. + Tue Apr 20 21:33:06 2010 NAKAMURA Usaku <usa@ruby-lang.org> * ext/dl/win32/lib/win32/registry.rb (PredefinedKey#create): root key 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); |