diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-21 04:57:37 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-21 04:57:37 +0000 |
commit | 4c9d6d801b5152545ba939f8bc350f5442972fef (patch) | |
tree | 7dfa6887e20f1faaca800b5699f5c06c5b7cf98f /ChangeLog | |
parent | f67be32291c437156328a3887c8448f669672c26 (diff) |
* 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.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -1,3 +1,28 @@ +Thu Nov 21 13:43:07 2013 Koichi Sasada <ko1@atdot.net> + + * 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. + Thu Nov 21 13:40:20 2013 Zachary Scott <e@zzak.io> * lib/observer.rb: [DOC] Clarify default observer method. |