[#3419] Valgrind analysis of [BUG] unknown node type 0 — Andrew Walrond <andrew@...>

Hello list,

19 messages 2004/09/17
[#3422] Re: Valgrind analysis of [BUG] unknown node type 0 — ts <decoux@...> 2004/09/17

>>>>> "A" == Andrew Walrond <andrew@walrond.org> writes:

[#3423] Re: Valgrind analysis of [BUG] unknown node type 0 — Andrew Walrond <andrew@...> 2004/09/17

On Friday 17 Sep 2004 12:01, ts wrote:

[#3424] Re: Valgrind analysis of [BUG] unknown node type 0 — ts <decoux@...> 2004/09/17

>>>>> "A" == Andrew Walrond <andrew@walrond.org> writes:

[#3425] Re: Valgrind analysis of [BUG] unknown node type 0 — Andrew Walrond <andrew@...> 2004/09/17

On Friday 17 Sep 2004 12:37, ts wrote:

[#3426] Re: Valgrind analysis of [BUG] unknown node type 0 — ts <decoux@...> 2004/09/17

>>>>> "A" == Andrew Walrond <andrew@walrond.org> writes:

[#3428] Re: Valgrind analysis of [BUG] unknown node type 0 — Andrew Walrond <andrew@...> 2004/09/17

On Friday 17 Sep 2004 13:05, ts wrote:

[#3429] Re: Valgrind analysis of [BUG] unknown node type 0 — ts <decoux@...> 2004/09/17

>>>>> "A" == Andrew Walrond <andrew@walrond.org> writes:

Re: [PATCH] dir.c --- Dir.chdir error handling

From: Yukihiro Matsumoto <matz@...>
Date: 2004-09-13 15:05:01 UTC
List: ruby-core #3388
Hi,

In message "Re: [PATCH] dir.c --- Dir.chdir error handling"
    on Mon, 13 Sep 2004 23:30:06 +0900, H.Yamamoto <ocean@m2.ccsnet.ne.jp> writes:

|To confirm this, we must go down function call. That is,
|
|  void somefunc()
|  {
|      VALUE s = rb_str_new2("foo");
|
|      func1(s);
|  }
|
|  void func1(VALUE v) /* this function doesn't protect v explicitly, so that resposibility */
|  {                   /* is for sub functions ... */
|      /* too complex codes here */
|
|      rb_fooboo(v);
|
|      if (/* ...... */)
|      {
|         func2(v, -1, 2, 3);
|      }
|      else
|      {
|         func3(1, v, rb_str_new2("foo"));
|      }
|  }
|
|And move to func2, func3.... mostly object will be protected with volatile or
|touched with OBJ_INFECT() or StringValue() somewhere, but there is possibility
|none of the functions won't protect it. I think [ruby-dev:19854] is such bug.

As Guy stated in [ruby-talk:03387], the VALUEs must be referenced from
somewhere (even without volatile) if it's still alive (in GC sense);
you don't have to worry about protection.  The only exception is the
usage of internal data _after_ the last reference to the VALUE.  In
that case, the VALUE reference might be optimized out, and GC may
cause unexpected free().

Or am I missing something?
							matz.


In This Thread