[ruby-list:40011] FreeBSD portsdb.rb が [BUG] Segmentation fault
From:
Mitsuru Ogino <ogino@...>
Date:
2004-09-06 12:09:55 UTC
List:
ruby-list #40011
荻野と申します。
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
<format:bdb1_btree> 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 <bdb1_assign>, 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 <rb_io_each_line>, 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