2012-02-23 63 views
2

我正在使用分布式对象在2个进程之间进行通信。 here分布式对象崩溃

每当我尝试在很短的时间内发送很多消息时,我观察到下面的崩溃。它只发生在MAC OS 10.5上。它似乎工作正常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 

这可能是由于许多同时请求到mDNSresponder。该方法适用于较少数量的消息。任何人都可以请帮忙?

回答

0

请考虑我在2016年在此处创建的this example的代码的重做。也许这可以为您提供一些稳定性。另外,你在2012年发布了这个版本。OSX 10.5将会相当老旧 - 我编写的大部分OSX应用程序现在都只支持OSX 10.8。与此同时,在崩溃事件中,最近我学到的是,如果您使用C API并且没有正确分配内存,那么您的代码中可能出现奇怪的东西(错误的地方)。例如,如果你正在使用sprintf和其他* char函数来处理char的函数。最近,我用char *s;而不是char s[1000];,我的应用程序在IPC机制中崩溃,令我惊异!我在线程消息中遇到了BAD ACCESS。当我修正char声明时,我的IPC突然开始正常工作,没有崩溃。去搞清楚!

如果这样不能解决您的问题,那么您可能会看到您正在建立的连接数量不堪重负的套接字。为此,您可能需要重新考虑如何构建解决方案并找到更少连接的更好策略。