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