Re: Bitcoind

ParseString にこの問題があることを確認し、修正した util.cpp を SVN にアップロードした。

string::npos == -1

unsigned int -1 (0xffffffff) と long unsigned int -1 (0xffffffffffffffff) を比較すると、unsigned int が 64 ビットに昇格され、0x00000000ffffffff != 0xffffffffffffffff となる。

マルッティ・マルミのメール(2010年3月5日 01:33 UTC)

gdb でデバッグ中に取得した別のテストランの debug.log を送ります。プログラムはデバッグ行「irc 8」の後にメモリーを食い始め、数秒以内に「terminate called after throwing an instance of ‘std::bad_alloc’」でクラッシュしました。

サトシ・ナカモトのメール(2010年3月3日 17:15 UTC)

RecvUntil の中で起きているが、まだ何が問題なのか分からない。考えられるのは、ソケットが大量の文字を受信している場合だ。

この irc.cpp を試してみてほしい。debug.log が急速に大きくなる可能性があるので、すぐに停止できるようにしておいてほしい。

マルッティ・マルミのメール(2010年3月3日 12:32 UTC)

debug.log を添付します

サトシ・ナカモトのメール(2010年3月3日 03:54 UTC)

かなり絞り込めた。debug.log に IRC の活動が一切出力されていないので、RecvUntil を通過できていないのだろう。目視では明らかな問題は見当たらない。ConnectSocket か RecvUntil のどちらかに問題があるはずだ。

添付の irc.cpp と net.cpp で試して、debug.log を送ってほしい。

あるいは、gdb で実行して ThreadIRCSeed をステップ実行することもできる。 gdb —args bitcoin [switches] b ThreadIRCSeed run step または u でステップオーバーしてルーチンから抜ける。

マルッティ・マルミのメール(2010年3月3日 01:50 UTC)

getinfo に関係なくエラーが発生します。ThreadIRCSeed をコメントアウトしたら問題が解決しましたよ。

サトシ・ナカモトのメール(2010年3月2日 22:27 UTC)

getinfo を実行しなくても同じ現象が起きるか?

以下に挙げる CreateThread をコメントアウトして、その後 1 つずつ有効に戻していき、再び問題が発生するまで試してみてほしい。そうすればどのスレッドに問題があるか分かる。

net.cpp の// Start threads 以下: CreateThread(ThreadIRCSeed, NULL) CreateThread(ThreadSocketHandler, NULL, true) CreateThread(ThreadOpenConnections, NULL) CreateThread(ThreadMessageHandler, NULL)

init.cpp: CreateThread(ThreadRPCServer, NULL);

マルッティ・マルミのメール(2010年3月2日 19:36 UTC)

送ります。クラッシュ時のエラーメッセージを伝え忘れていました:

terminate called after throwing an instance of ‘std::bad_alloc’ what(): std::bad_alloc

サトシ・ナカモトのメール(2010年2月28日 20:09 UTC)

debug.log を送ってもらえるか?

マルッティ・マルミのメール(2010年2月28日 04:12 UTC)

ddd デバッガーで bitcoind のビルドをデバッグしようとしましたが、まだうまくいっていません。いつもシステムのメモリーを全部使い切って最終的にクラッシュしてしまいます。最新の 64 ビット版 bitcoind のビルドをもう一度送っていただけますか?自分のビルドの問題なのか確認したいです。

原典の外部ソース

https://mmalmi.github.io/satoshi/
2024 年 2 月、COPA 対ライト裁判の証言の一環として GitHub で公開

他の外部ソース