From: Tomoyuki Chikanaga Date: 2010-06-23T09:27:11+09:00 Subject: [ruby-dev:41677] Re: [Bug #3463] 1.9.2-preview3 で [BUG] gc_sweep(): unknown data type 0x0 近永と申します。 パッチのレビューありがとうございます。 (2010/06/22 21:02), Nobuyoshi Nakada wrote: (snip) > finaliser_at_exitの時点では、新しいオブジェクトが割り当てられる > ことは考えなくてもいいんじゃないかと思いますが。 clear_dump_arg に arg->str の flags が 0 で来てた時は、下のような コールスタックでした。普通にメソッド呼び出しの間に遅延された free 関数の呼び出しが挟み込まれているようです。 ところで、単に興味から訊いてみたいのですが、なぜこのように T_DATA型オブジェクトの解放は遅延されてるんでしょう。 GC での停止時間を分散させるためでしょうか? #0 clear_dump_arg (arg=0xa9f63c0) at marshal.c:856 #1 0x0807cec2 in free_dump_arg (ptr=0xa9f63c0) at marshal.c:175 #2 0x080641ad in run_final (objspace=0x9829808, obj=167215020) at gc.c:2601 #3 0x08062a17 in finalize_list (objspace=0x9829808, p=0x9f77fac) at gc.c:1806 #4 0x0806422a in finalize_deferred (objspace=0x9829808) at gc.c:2617 #5 0x0806423d in gc_finalize_deferred (objspace=0x9829808) at gc.c:2624 #6 0x08064263 in rb_gc_finalize_deferred () at gc.c:2631 #7 0x0814922c in rb_threadptr_execute_interrupts_rec (th=0xb5023148, sched_depth=0) at thread.c:1295 #8 0x08149312 in rb_threadptr_execute_interrupts (th=0xb5023148) at thread.c:1323 #9 0x081354e3 in vm_call_method (th=0xb5023148, cfp=0xb6bfe980, num=0, blockptr=0x0, flag=0, id=784, me=0x9869b60, recv=7538958) at vm_insnhelper.c:669 #10 0x081394c3 in vm_exec_core (th=0xb5023148, initial=0) at insns.def:999 #11 0x0814418d in vm_exec (th=0xb5023148) at vm.c:1139 Chikanaga Tomoyuki Nippon Control System Corp.