-
void rb_gc_register_address(VALUE *addr) -
ポインタ addr が指す変数を GC の対象にします。
addrは呼び出した Ractor に登録され、その Ractor の GC だけが格納されたオブジェクトをマークします。どの Ractor からでも登録できますが、*addrに格納できる値は、特別な定数、shareable なオブジェクト、登録した Ractor が所有する unshareable なオブジェクトに限ります。他の Ractor の unshareable なオブジェクトを格納すると、addrが参照したままオブジェクトが解放され、use-after-free になることがあります。プロセスと同じ寿命のアドレス (static なVALUE) は、main Ractor から登録するか、shareable な値だけを格納してください。登録した Ractor が Ractor#value で join されると、残りの登録は join した Ractor に移ります。そうでなければ、その Ractor が回収されたときに main Ractor に移ります。 [feature#22277]