1

建立/删除回调(例如 kauth_unlisten_scope)和回调本身(在 xnu 代码库中,是的,我知道,它已经过时了)之间似乎没有同步。这将跟踪/排出回调和与扩展本身的调用同步的负担。但这也是有问题的,因为有一个窗口指出线程已退出回调并实际上从扩展代码中返回。

是否有任何模式可以正确避免这场比赛?或者,Apple 是否有任何文档表明他们已正确同步?

4

1 回答 1

1

据我所知,没有 100% 可靠的方法可以防止 kauth 回调注销竞争条件;API 设计得很糟糕。Apple 自己实现/推荐了一个简单的基于原子计数器的机制,您可以在Kauth-O-Rama 示例中看到该机制。gActivationCountKauthORama.c源文件中搜索。线程在回调中递增或递减之后运行代码的可能性仍然很小,但我从未见过由此引起的崩溃。

于 2016-06-29T08:36:08.570 回答