summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-01-31 07:02:21 -0800
committerYukihiro "Matz" Matsumoto <[email protected]>2013-01-31 07:02:21 -0800
commit21310019639d7c6ec13b558ba73766121985950e (patch)
tree1b2bbf92699b43ff212ee7405b0a5d29638f790d /src
parentf3148b691438ad94af077d53c163c5041cb14caa (diff)
parentee0cfb2101901164b601e8c75b6c37427532d884 (diff)
downloadmruby-21310019639d7c6ec13b558ba73766121985950e.tar.gz
mruby-21310019639d7c6ec13b558ba73766121985950e.zip
Merge pull request #805 from masamitsu-murase/add_field_write_barrier_to_guard_method_from_gc
Add field_write_barrier when an method is defined.
Diffstat (limited to 'src')
-rw-r--r--src/class.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/class.c b/src/class.c
index 530fc5ce4..136a07cb6 100644
--- a/src/class.c
+++ b/src/class.c
@@ -293,6 +293,9 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, struct RPro
if (!h) h = c->mt = kh_init(mt, mrb);
k = kh_put(mt, h, mid);
kh_value(h, k) = p;
+ if (p) {
+ mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ }
}
void
@@ -322,6 +325,9 @@ mrb_define_method_vm(mrb_state *mrb, struct RClass *c, mrb_sym name, mrb_value b
k = kh_put(mt, h, name);
p = mrb_proc_ptr(body);
kh_value(h, k) = p;
+ if (p) {
+ mrb_field_write_barrier(mrb, (struct RBasic *)c, (struct RBasic *)p);
+ }
}
static mrb_value