Project

General

Profile

Actions

Bug #3463

closed

1.9.2-preview3 で [BUG] gc_sweep(): unknown data type 0x0

Added by nagachika (Tomoyuki Chikanaga) almost 14 years ago. Updated about 13 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux]
Backport:

Description

=begin
1.9.2-preview3 である大きなプログラムを実行中に以下のようなエラーが発生しました。

[BUG] gc_sweep(): unknown data type 0x0(0xab7cf14)
ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux]

発生条件はかなり複合的らしく再現する小さなスクリプトを作成できていませんが、
gdb で実行してみると gc_sweep で上記のチェックにひっかかっているオブジェクトは flags が FL_TAINT だけという状態だったため、
OBJ_TAINT している場所をさらってみたところ marshal.c の clear_dump_arg が怪しいようでした。

dump_arg(T_DATA 型のオブジェクト)は GC で deffered されるため dump_arg::str が先に sweep されてしまう場合があり、
clear_dump_arg() で解放後の VALUE に対して OBJ_TAINT (や、おそらく OBJ_UNTRUST も)してしまうと発生するようでした。

とりあえず添付のパッチを当ててみると落ちなくなりました。また make test, test-all でエラーが増えていません。
=end


Files

marshal.patch (488 Bytes) marshal.patch nagachika (Tomoyuki Chikanaga), 06/22/2010 06:35 PM
marshal.patch (667 Bytes) marshal.patch nagachika (Tomoyuki Chikanaga), 06/22/2010 07:49 PM

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #2386: r25230 causes SEGV arround MarshalClosednobu (Nobuyoshi Nakada)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0