2014-12-21 4 views
0

Я использую интерфейс C для служб XPC; кстати, мой XPC-сервис работает очень красиво, из-за следующей проблемы.Сбой службы массива XPC

На днях я попытался отправить «большой» массив через XPC; порядка 200 000 записей. Обычно мое приложение обрабатывает данные порядка нескольких тысяч записей и не имеет никаких проблем с этим. Для других целей массив такого размера может не быть особенным.

Вот мой код сервера C++ для создания массива:

xpc_connection_t remote = xpc_dictionary_get_remote_connection(event); 
    xpc_object_t reply = xpc_dictionary_create_reply(event); 

    xpc_object_t times; 
    times = xpc_array_create(NULL, 0); 

    for(unsigned int s = 0; s < data.size(); s++) 
    { 
    xpc_object_t index = xpc_uint64_create(data[s]); 
    xpc_array_append_value(times, index); 
    } 

    xpc_dictionary_set_value(reply, "times", times); 
    xpc_connection_send_message(remote, reply); 

    xpc_release(times); 
    xpc_release(reply); 

и здесь код клиента:

xpc_object_t times = xpc_dictionary_get_value(reply, "times"); 
    size_t count = xpc_array_get_count(times); 
    for(int c = 0; c < count; c++) 
    { 
    long my_time = xpc_array_get_uint64(times, c); 
    local_times.push_back(my_time); 
    } 

Если я пытаюсь обрабатывать большой массив, я получаю ошибку сегм (SIGSEGV)

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 libxpc.dylib     0x00007fff90e5cc02 xpc_array_get_count + 0 
+1

Перекармливания является общей проблемой во время Рождества –

+0

Итак, каков размер каждой записи? Вы видите это только в том случае, когда количество записей велико, как 2lakh? Похоже на переполнение стека – Gopi

ответ

0

Когда вы говорите «чрезвычайно большой массив», вы говорите о чем-то, d как ресурс-боров и убить?

XPC предназначен только для коротких транзакций, а не для длинных сервисных запусков.

Если вы собираетесь делать вызовы, которые делают запуск программ ждать, то я предлагаю вам попробовать https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

Когда умирает служба .. Есть какие-то конкретные события, другие, то SIG_ABORTS и т.д ... уволят?

Вы получаете «сервис XPC был признан недействительным» (что обычно означает запуск программ убили его, или вы получите «XPC сервис/вышел преждевременно», который обычно является ошибкой кода обработчика.

+0

В моем вопросе вы можете видеть размер данных, с которыми я хочу иметь дело. а не запуск службы, я просто переношу некоторые данные из подпроцесса. – koan

Смежные вопросы