2012-03-09 6 views
0

私はZeroMQclrzmq-x64 2.2.2(NuGetから)を使用する.NET Framework 4.0 x64上でx64 C#アプリケーションを実行しています。libzmq.dllでこのクラッシュを引き起こす原因は何ですか?

デバッグ(ieF5)してもうまくいきますが、約30個のメッセージしか送信しません。デバッガ(CTRL-F5など)を接続していないと、1秒に1000を超えるメッセージを管理しますが、約30秒後にクラッシュします。

クラッシュする箇所が自分のコードにないため、問題の診断に問題があります。

役に立つと思われる情報をすべて貼り付けましたが、スタックトレースをどのように解釈するのか分かりません。

イベントログ:

Faulting application name: MyApplication.exe, version: 1.0.0.0, time stamp: 0x4f5a05b3 
Faulting module name: MSVCR100.dll, version: 10.0.40219.325, time stamp: 0x4df2bcac 
Exception code: 0x40000015 
Fault offset: 0x00000000000761c9 
Faulting process id: 0x273c 
Faulting application start time: 0x01ccfdf8acdc087e 
Faulting application path: [path redacted]\MyApplication.exe 
Faulting module path: C:\Windows\system32\MSVCR100.dll 
Report Id: f3518caf-69eb-11e1-9ed1-50e549e1c0d9 

スタックトレース:

msvcr100.dll!__crt_debugger_hook() 
msvcr100.dll!_call_reportfault() + 0x124 bytes 
msvcr100.dll!abort() + 0x35 bytes 
libzmq.dll!zmq::signaler_t::make_fdpair(unsigned __int64 * r_=0x000000002c557ee0, unsigned __int64 * w_=0x000007feedcb7ad2) Line 263 C++ 
libzmq.dll!zmq::signaler_t::signaler_t() Line 80 C++ 
libzmq.dll!zmq::mailbox_t::mailbox_t() Line 26 + 0x17 bytes C++ 
libzmq.dll!zmq::socket_base_t::socket_base_t(zmq::ctx_t * parent_=0x0000000027e3e470, unsigned int tid_=4294967294) Line 124 + 0x6b bytes C++ 
libzmq.dll!zmq::push_t::push_t(zmq::ctx_t * parent_=0x0000000076e3e3db, unsigned int tid_=0) Line 30 + 0xe bytes C++ 
libzmq.dll!zmq::socket_base_t::create(int type_=43532552, zmq::ctx_t * parent_=0x0000000002984130, unsigned int tid_=43532512) Line 100 + 0x29 bytes C++ 
libzmq.dll!zmq::ctx_t::create_socket(int type_=489832384) Line 184 + 0xe bytes C++ 
clr.dll!DoNDirectCall__PatchGetThreadCall() + 0x7b bytes 
000007ff00168461() 
000007ff0016833f() 
000007ff00166b22() 
000007ff00166997() 
mscorlib.ni.dll!000007fef4669e70() 
[Frames below may be incorrect and/or missing, no symbols loaded for mscorlib.ni.dll] 
00000000030bd4c0() 
0000000027e3e9c8() 
mscorlib.ni.dll!000007fef4094568() 
clr.dll!JIT_IsInstanceOfAny() + 0x20 bytes 
mscorlib.ni.dll!000007fef465e56b() 
00000000030bd560() 
00000000006f8d10() 

答えて

1

これはhttps://github.com/zeromq/libzmq/pull/491です。

基本的に、多くのZMQソケットが頻繁に作成されて破壊される忙しいWindowsシステムでは、ソケットの作成は内部ソケットのペアの作成を意味し、上記のスタックと同じスタックで失敗する可能性があります。さらに悪いことに、非デバッグビルドでは、例外が発生したクリティカルセクションをソケット作成コードで破棄し、ソケット作成時の後続の試行を永久に停止させます。

上記のリンクには、これを入力するときにテストしている修正があります。

+0

修正プログラムは正常に動作します。ソケットを作成している間にこれらの失敗を見ることはできません。また、後で永遠にhang_socketが見えます。 –

1

は、それはあなたがすべての時間を新しいソケットを作成することは可能ですか?その場合、コンテキストとソケットを一度セットアップして再利用してみてください。

+0

私は共有コンテキストを使用していますが、異なるタスクで複数のソケットを作成しています。私がソケットを共有している場合、あるタスクがSend()またはSendMore()をそのソケット上で試みている間に別のものがRecv()を呼び出しているので、フレーム化されたメッセージを持つREQ/REPは機能しません。私はこの制限を打つことはないので、ソケットをプールに制限する方法が必要だと思います。 – tjrobinson

関連する問題