From: SASADA Koichi <ko1@...> Date: 2014-08-04T09:50:40+09:00 Subject: [ruby-core:64180] Re: [ruby-trunk - Feature #9894] [Open] [RFC] README.EXT: document rb_gc_register_mark_object (2014/08/04 7:48), Eric Wong wrote: > > --- a/gc.c > +++ b/gc.c > @@ -5154,13 +5154,15 @@ rb_gc_register_mark_object(VALUE obj) > void > rb_gc_register_address(VALUE *addr) > { > - rb_objspace_t *objspace = &rb_objspace; > - struct gc_list *tmp; > - > - tmp = ALLOC(struct gc_list); > - tmp->next = global_list; > - tmp->varptr = addr; > - global_list = tmp; > + if (OBJ_FROZEN(*addr)) { > + rb_gc_register_mark_object(*addr); > + } else { > + rb_objspace_t *objspace = &rb_objspace; > + struct gc_list *tmp = ALLOC(struct gc_list); > + tmp->next = global_list; > + tmp->varptr = addr; > + global_list = tmp; > + } > } > > void This patch does not work. You should not use rb_gc_register_mark_object() because *addr is mutable. -- // SASADA Koichi at atdot dot net