Сбой с распределенными объектами - PullRequest
2 голосов
/ 23 февраля 2012

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

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

1 Ответ

0 голосов
/ 02 апреля 2016

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

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

...