Сбой сервисного массива XPC

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

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

Вот мой код сервера 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 ответ

Когда вы говорите "чрезвычайно большой массив", говорите ли вы о чем-то, что launchd может расценивать как захват и уничтожение ресурсов?

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

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

Когда Служба умирает... Запускаются ли какие-либо особые события, кроме SIG_ABORTS и т.д...?

Получаете ли вы "служба xpc была признана недействительной" (что обычно означает, что launchD убил ее, или вы получили "служба xpc / преждевременно вышла", что обычно является ошибкой кода обработчика).

Другие вопросы по тегам