[ruby-cvs:50887] ko1:r43744 (trunk): * gc.c: change RGENGC_CHECK_MODE (>= 2) logic.

ko1 at ruby-lang.org ko1 at ruby-lang.org
Thu Nov 21 13:57:38 JST 2013


ko1	2013-11-21 13:57:37 +0900 (Thu, 21 Nov 2013)

  New Revision: 43744

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=43744

  Log:
    * gc.c: change RGENGC_CHECK_MODE (>= 2) logic.
      Basically, make an object graph of all of living objects before and
      after marking and check status.
      [Before marking: check WB sanity]
      If there is a non-old object `obj' pointed from old object
      (`parent') then `parent' or `obj' should be remembered.
      [After marking: check marking miss]
      Traversible objects with the object graph should be marked.
      (However, this alert about objects pointed by machine context
       can be false positive. We only display alert.)
      [Implementation memo]
      objspace_allrefs() creates an object graph.
      The object graph is represented by st_table, key is object (VALUE)
      and value is referring objects. Referring objects are stored by
      "struct reflist".
    * gc.c (init_mark_stack): do not use push_mark_stack_chunk() at init.
      This pre-allocation causes failure on is_mark_stask_empty()
      without any pushing.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c


More information about the ruby-cvs mailing list