From: Mitsuru Ogino Date: 2004-09-06T21:09:55+09:00 Subject: [ruby-list:40011] FreeBSD portsdb.rb が [BUG] Segmentation fault 荻野と申します。 FreeBSD 関連の ML の方が良いのかもとも思いましたが、落ちているのは Ruby のようですのでこちらに書かせていただきます。問題があればご指導下 さい。 # http://www.ruby-lang.org/ja/ の目次(左側の部分)に「バグかも知れな # いと思ったら」的なポインタがあるとうれしいと思いました。 Subject の通り、FreeBSD にて portupgrade, portinstall 系のコマンドが使 用できなくなりました。ports tree を cvs で更新して INDEX を再構築しよ うとしてからのことです。 ruby は ruby-1.8.2-preview2 だと思いますが、FreeBSD 5.2.1-RELEASE-p8 上で ports current からインストールしました。 $ /usr/local/bin/ruby18 -v ruby 1.8.2 (2004-07-29) [i386-freebsd5] です。 ここで、たとえば portupgrade -na を実行すると、 # portupgrade -na ---> Reading default options: -v -L /var/log/portupgrade-%s::%s.log ---> Session started at: Mon, 06 Sep 2004 20:57:52 +0900 [Failed `Inappropriate file type or format'] [Updating the portsdb in /usr/ports ... - 11735 port entries found .........1000.........2000.........3000.........4000.........5000 .........6000.........7000.........8000.... /usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:587: [BUG] Segmentation fault ruby 1.8.2 (2004-07-29) [i386-freebsd5] となります(適当に改行してあります)。問題の箇所は、cat -n から見ると ころ、こんなようなコードです。 413 case db_driver 414 when :bdb_btree 415 @db = BDB::Btree.open @db_file, nil, 'w+', 0664, *@db_params 416 when :bdb_hash 417 @db = BDB::Hash.open @db_file, nil, 'w+', 0664, *@db_params 418 when :bdb1_btree 419 @db = BDB1::Btree.open @db_file, 'w+', 0664, *@db_params 420 when :bdb1_hash 421 @db = BDB1::Hash.open @db_file, 'w+', 0664, *@db_params 422 else 423 File.unlink(@db_file) if File.exist?(@db_file) 424 425 @db = DBM.open(@db_filebase, 0664) 426 end (略) 584 @origins << origin 585 @pkgnames << pkgname 586 => 587 @db[origin] = port_info 588 @db[pkgname.to_s] = origin こういった場合の対処は良く分かっていませんので的はずれかも知れませんが、 とりあえず ports から ruby18 を CFLAGS=-g を指定して再インストールし、 gdb /usr/local/bin/ruby18 を実行して run して見ました。すると、 Program received signal SIGSEGV, Segmentation fault. 0x282270a6 in memmove () from /lib/libc.so.5 と表示されて止まったので、bt と入力して以下の結果を得ました。とりあえ ず 20行くらいを載せてみます。 #0 0x282270a6 in memmove () from /lib/libc.so.5 #1 0x08511400 in ?? () #2 0x28222efd in __bt_split () from /lib/libc.so.5 #3 0x2822268e in __bt_split () from /lib/libc.so.5 #4 0x2821d537 in __bt_put () from /lib/libc.so.5 #5 0x282680f1 in bdb1_put () from /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd5/bdb1.so #6 0x2826816d in bdb1_assign () from /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd5/bdb1.so #7 0x280acbf1 in call_cfunc (func=0x28268130 , recv=135418120, len=2, argc=2, argv=0xbfbf6420) at eval.c:5411 #8 0x2809f3b4 in rb_call0 (klass=135573200, recv=135418120, id=333, oid=333, argc=2, argv=0xbfbf6420, body=0x814a69c, nosuper=0) at eval.c:5536 #9 0x2809fe4c in rb_call (klass=135573200, recv=135418120, mid=333, argc=2, argv=0xbfbf6420, scope=0) at eval.c:5757 #10 0x28099d38 in rb_eval (self=135481640, n=0x82a06a8) at eval.c:3239 #11 0x28099420 in rb_eval (self=135481640, n=0x829fb40) at eval.c:3064 #12 0x2809d8e5 in rb_yield_0 (val=138652440, self=135481640, klass=0, flags=0, avalue=2) at eval.c:4745 #13 0x2809dd2b in rb_yield_values (n=-1) at eval.c:4851 #14 0x28090b94 in each_with_index_i (val=138663600, memo=0x8124fc8) at enum.c:802 #15 0x2809d8cc in rb_yield_0 (val=138663600, self=134724024, klass=0, flags=0, avalue=0) at eval.c:4742 #16 0x2809dca1 in rb_yield (val=138663600) at eval.c:4827 #17 0x280bbd6f in rb_io_each_line (argc=0, argv=0x0, io=135417940) at io.c:1537 #18 0x280acb9d in call_cfunc (func=0x280bbcec , recv=135417940, len=-1, argc=0, argv=0x0) at eval.c:5402 #19 0x2809f3b4 in rb_call0 (klass=134689884, recv=135417940, id=3833, oid=3833, argc=0, argv=0x0, body=0x807313c, nosuper=0) at eval.c:5536 #20 0x2809fe4c in rb_call (klass=134689884, recv=135417940, mid=3833, argc=0, argv=0x0, scope=1) at eval.c:5757 以上、とりあえずご報告しておきます。必要な情報の取り方があればお教え下 さい。よろしくお願いいたします。 -- 荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず Verama Systems Key fingerprint = 7F26 5414 1805 F31B 1617 10B7 C117 07AE 1691 9BD1