summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--vm_method.c8
2 files changed, 14 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d2d72061d6..1b8db0dc6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);