Сбой с распределенными объектами

Я использую распределенные объекты для связи между двумя процессами в соответствии с тем, что дано. здесь

Всякий раз, когда я пытаюсь отправить много сообщений за короткий промежуток времени, я наблюдаю следующий сбой. Это происходит только на 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. Подход отлично работает для меньшего количества сообщений. Кто-нибудь может помочь???


person ping localhost    schedule 23.02.2012    source источник


Ответы (1)


Попробуйте переработать код с помощью этого примера, который я создал здесь в 2016 году. Возможно, это обеспечит вам некоторую стабильность. Кроме того, вы опубликовали это еще в 2012 году. OSX 10.5 будет довольно старой - большинство моих приложений OSX, которые я сейчас кодирую, поддерживают только OSX 10.8. Между тем, что касается сбоев, недавно я узнал, что у вас могут быть странные вещи, которые появляются в неправильном месте в вашем коде (неправильное название), если вы используете C API и не распределяете память должным образом. Например, если вы используете такие функции, как sprintf и другие функции *f C, которые делают что-то с char. Недавно я использовал char *s; вместо char s[1000]; и к моему дикому удивлению мое приложение рухнуло в механизме IPC! Я получал ПЛОХОЙ ДОСТУП к сообщениям темы. Когда я исправил объявление char, мой IPC внезапно начал работать без сбоев. Иди разберись!

Если это не исправит вас, то вы, вероятно, видите, что сокеты перегружены количеством соединений, которые вы делаете. Для этого вам, вероятно, нужно переосмыслить то, как вы разработали свое решение, и найти лучшую стратегию, которая реже подключается.

person Volomike    schedule 02.04.2016