2012-02-23 5 views
2

分散オブジェクトを使用して、2つのプロセス間で通信します。 here分散オブジェクトでクラッシュする

私は短い時間で多くのメッセージを送信しようとすると、次のクラッシュを観察します。 MAC OS 10.5でのみ発生します。これはmDNSresponderに多くの同時要求に起因することができます10.6/10.7

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000001 
Crashed Thread: 26 




    Thread 26 Crashed: 
     0 libSystem.B.dylib    0x9453d2ee ConnectionResponse + 100 
     1 libSystem.B.dylib    0x9453d114 DNSServiceProcessResult + 754 
     2 com.apple.CFNetwork    0x929566b1 _SocketCallBack_NetService(__CFSocket*, unsigned long, __CFData const*, void const*, void*) + 43 
     3 com.apple.CoreFoundation  0x92a5a6f0 __CFSocketDoCallback + 640 
     4 com.apple.CoreFoundation  0x92a5bd35 __CFSocketPerformV0 + 133 
     5 com.apple.CoreFoundation  0x92a513c5 CFRunLoopRunSpecific + 3141 
     6 com.apple.CoreFoundation  0x92a51aa8 CFRunLoopRunInMode + 88 
     7 com.apple.Foundation   0x9156c869 -[NSSocketPortNameServer portForName:host:nameServerPortNumber:] + 457 
     8 com.apple.Foundation   0x9156c4c8 -[NSSocketPortNameServer portForName:host:] + 56 
     9 com.apple.Foundation   0x91446a68 +[NSConnection connectionWithRegisteredName:host:usingNameServer:] + 56 
     10 ...yyyyyyyyyy.xxxxxxxx   0x00110bbe -[MessageSendingModule sendMessageInternal:] + 617 

上で正常に動作しているようです。このアプローチは、少ないメッセージ数でうまく動作します。誰でも助けてもらえますか?

答えて

0

私が2016年にここで作成したthis exampleのコードを修正することを検討してください。おそらくそれはあなたにいくつかの安定性を提供します。また、あなたは2012年にこれを掲載しました。OSX 10.5はかなり古くなるでしょう - 私が現在コーディングしている私のOSXアプリケーションの大部分は、OSX 10.8までしかサポートしていません。一方、クラッシュ時には、最近私が学んだことは、C APIを使用していてメモリを適切に割り当てていないと、あなたのコードの間違った場所に間違ったものが表示されるということです。たとえば、sprintfやその他の* C関数のような関数を使用していて、char型のものを使用しているとします。最近、私はchar s[1000];の代わりにchar *s;を使用し、私のアプリケーションは私の野生の驚きにIPCメカニズムでクラッシュしました!私はスレッド・メッセージでBAD ACCESSを取得していました。私がchar宣言を修正したとき、私のIPCは突然クラッシュすることなく正常に動作するようになりました。 Go figure!

これで解決できない場合は、接続数に圧倒されているソケットを見ている可能性があります。そのためには、ソリューションをどのように構築したか再考し、接続頻度の低いより良い戦略を見つけ出す必要があります。