diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-06-25 07:59:23 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-06-25 07:59:23 +0000 |
commit | f4d71ad509c929444c43f37befc0f14571cec797 (patch) | |
tree | bbf98eaecab76b4181bb4b328546d7b0e30715c2 /method.h | |
parent | f94ed2ce4bcf201a4d16a85f0fdbbfce4ea20e35 (diff) |
* vm_method.c: make a rb_method_definition_t data (def) *after* making
a rb_method_entry_t data (me).
Normally, `me' points `def'. Some Ruby objects pointed from `def'
and objects are marked by `me' (mark_method_entry() in gc.c).
However, `def' is built before making a `me', then nobody can mark
objects pointed from `def' before making (and pointing from) `me'.
I hope this patch solve #11244.
* vm_method.c: remove `rb_' prefix from some static functions.
* method.h (rb_method_entry_create): constify
* gc.c (mark_method_entry): add checking `def' and
`def->body.iseq.iseqptr' availability because they can be NULL.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51026 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'method.h')
-rw-r--r-- | method.h | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -185,7 +185,7 @@ VALUE rb_obj_method_location(VALUE obj, ID id); void rb_free_method_entry(const rb_method_entry_t *me); void rb_sweep_method_entry(void *vm); -rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, rb_method_definition_t *def); +rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, const rb_method_definition_t *def); rb_method_entry_t *rb_method_entry_clone(const rb_method_entry_t *me); void rb_method_entry_copy(rb_method_entry_t *dst, const rb_method_entry_t *src); |