From 61e5cf84fffb7620b849fda4cbba58302b0538ff Mon Sep 17 00:00:00 2001 From: naruse Date: Sun, 18 Apr 2010 17:59:56 +0000 Subject: [PATCH] * vm_method.c (rb_add_method_def): workarond fix for redefinition of methods. This is because cfp->me uses the rb_method_entry which is freed by redefinition of remove_method. Note that reusing may cause another problem when the usage is changed. [ruby-core:27320] [ruby-core:29464] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ vm_method.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9bbfa722d0..1126767e6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Mon Apr 19 00:27:03 2010 NARUSE, Yui + + * vm_method.c (rb_add_method_def): workarond fix for redefinition + of methods. This is because cfp->me uses the rb_method_entry + which is freed by redefinition of remove_method. Note that + reusing may cause another problem when the usage is changed. + [ruby-core:27320] [ruby-core:29464] + Sun Apr 18 22:13:21 2010 Nobuyoshi Nakada * parse.y (string_content): cond_stack and cmdarg_stack are VALUE. diff --git a/vm_method.c b/vm_method.c index 027042b79c..04b62f2c9d 100644 --- a/vm_method.c +++ b/vm_method.c @@ -210,12 +210,18 @@ rb_add_method_def(VALUE klass, ID mid, rb_method_type_t type, rb_method_definiti rb_id2name(old_def->original_id)); } } - rb_free_method_entry(old_me); + + /* FIXME: this avoid to free methods used in cfp, but reusing may cause + * another problem when the usage is changed. + */ + me = old_me; + } + else { + me = ALLOC(rb_method_entry_t); } rb_clear_cache_by_id(mid); - me = ALLOC(rb_method_entry_t); me->flag = NOEX_WITH_SAFE(noex); me->called_id = mid; me->klass = klass;