日本コントロールシステム(株)の近永と申します。
よろしくお願いします。
[ruby-dev:30404] で報告した SEGV の調査の途中で、
ext/racc/cparse/cparse.c を読んでいる時に、
cparse_params_mark() で goto_pointer という構造体メンバに対して
5回連続で rb_gc_mark() を呼んでいるのをみて不思議に思いました。
mark関数は複数呼んでも問題ないように見えたので、別に支障は
ないのだろうと思いますが、多分1回でよいのではないでしょうか。
何か特に意図があってのことなのでしょうか。
Index: ext/racc/cparse/cparse.c
===================================================================
--- ext/racc/cparse/cparse.c (リビジョン 11834)
+++ ext/racc/cparse/cparse.c (作業コピー)
@@ -393,10 +393,6 @@
rb_gc_mark(v->goto_check);
rb_gc_mark(v->goto_default);
rb_gc_mark(v->goto_pointer);
- rb_gc_mark(v->goto_pointer);
- rb_gc_mark(v->goto_pointer);
- rb_gc_mark(v->goto_pointer);
- rb_gc_mark(v->goto_pointer);
rb_gc_mark(v->reduce_table);
rb_gc_mark(v->token_table);
rb_gc_mark(v->state);
以上、失礼しました。
--------------------------------------------
Chikanaga Tomoyuki
NIPPON CONTROL SYSTEM Corporation
URL http://www.nippon-control-system.co.jp/
--------------------------------------------