morita
morit****@razil*****
2008年 9月 12日 (金) 01:54:08 JST
森です。 本件、原因が分かったような気がします。 現在のテストコードですと、sen_pat_lockないしsen_hash_lockを実行した直後に cut_test_context_pass_assertion()に入りますが、 その内部からcut-xml-stream.c:flow()が呼ばれ、stream->mutexをlockしようとします。 この時にデッドロックが発生する場合があるようです。 sen_pat_lock(sen_hash_lock)とsen_pat_unlock(sen_hash_unlock)との間では cut_assert_*を呼ばないようにすることでこの問題を回避することができるようです。 (他にも対処方法があるかもしれませんが) 添付のパッチを適用すると、手元の環境ではデッドロックが発生しなくなりました。 (omission以外は全てのテストにパスするようになりました!) morita さんは書きました: > 森です。 > > 貴重なご指摘ありがとうございます!調査してみます。 > > Kouhei Sutou さんは書きました: >> 須藤です。 >> >> 2008/09/10 16:09 Kouhei Sutou <kou****@cozmi*****>: >> >>> ただ、マルチプロセス・マルチスレッドだとたまに刺さるようです。が、 >>> これはCutterが悪そうな気もするので調べてみます。 >> と、思ったのですが、ブロックしている子プロセスはsen_hash_lock() >> の中でusleep()しながらくるくる回っているので、Senna側なのかなぁと >> いう気がしてきました。 >> >> ロックが必要な箇所はSEN_TABLE_ADD付きでlookupするところ >> だけでよいですよね? >> >> _______________________________________________ >> Senna-dev mailing list >> Senna****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/senna-dev >> バグ報告方法:http://qwik.jp/senna/bug_report.html >> > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html > -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: tmp.patch 型: text/x-diff サイズ: 1896 バイト 説明: 無しDownload