2013年4月16日火曜日

トラブルシューティング–FreeBSD・portsdb.rb で cross-thread violation on rb_gc()

最近ブログを更新してないですが,忙しく働いています.

久しぶりにFreeBSDではまったのでメモ.

長い間Portsをアップデートしていなかったので久しぶりにportsnap updateして,portupgradeをアップグレードしようとしたら,"cross-thread violation on rb_gc()"というエラーメッセージが出て動かなくなった.

てくめも@ecoop.netの「トラブルシューティング – portsdb.rb で cross-thread violation on rb_gc()」という記事に書いてあるのと同じ現象.

ただし当方のFreeBSD-8では,書いてある対処方法(ruby18をmake configして非スレッド対応にする)が使えなかった.make configしてもそのようなオプションが出ないため.

エラーメッセージや上記の記事を手がかりに,スレッドが悪さしているのでは? と考えて,スレッド関連ライブラリをリンクしているrubyモジュールを探す.
# find /usr/local/lib/ruby -name \*.so -print | xargs ldd | less
ruby18-bdbとruby18-gdbmが該当した(libthr.soをリンクしていた).まさにportupgradeに関係がありそうなモジュールなので,それを手作業で再インストール.
# cd /usr/ports/databases/ruby-bdb
# make clean reinstall
# cd /usr/ports/databases/ruby-gdbm
# make clean reinstall
これで復活.portsdbできるようになり,ひいてはportupgradeなども使えるようになった.
同じような現象ではまっている人にはいくらか役立つかもしれないと思い,残しておく.

0 件のコメント:

コメントを投稿