XPC服务阵列崩溃

时间:2014-12-21 20:00:27

标签: c macos xpc

我正在使用C接口进行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);
  }

如果我尝试处理大型数组,我会遇到一个seg错误(SIGSEGV)

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

1 个答案:

答案 0 :(得分:0)

当你说“极大阵”时,你是否在谈论推出的东西可能会被视为资源匮乏和杀戮?

XPC只是用于短时间的交易运行,而不是基于长期服务的运行。

如果你要打电话让launchd等待,那么我建议你试试https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

当服务终止时..除了SIG_ABORTS等之外的任何特定事件......被解雇了吗?

你得到“xpc服务失效”(这通常意味着launchD杀了它,或者你得到了“xpc service / exitedly pasticallyly”,这通常是处理程序代码错误。