Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在kext中调用proc_rele()时,OS X中的内核死机_C_Macos_Kernel_Darwin_Kernel Extension - Fatal编程技术网

在kext中调用proc_rele()时,OS X中的内核死机

在kext中调用proc_rele()时,OS X中的内核死机,c,macos,kernel,darwin,kernel-extension,C,Macos,Kernel,Darwin,Kernel Extension,我有一个内核恐慌,不知道为什么 在OS X 10.11.3的内核扩展中,哪些条件可能导致以下函数崩溃,从而导致死机 static int parent_pid(int pid) { int ppid = 0; proc_t process = proc_find(pid); if (process) { ppid = proc_ppid(process); proc_rele(process); } return ppid;

我有一个内核恐慌,不知道为什么

在OS X 10.11.3的内核扩展中,哪些条件可能导致以下函数崩溃,从而导致死机

static int parent_pid(int pid) {
    int ppid = 0;
    proc_t process = proc_find(pid);
    if (process) {
        ppid = proc_ppid(process);
        proc_rele(process);
    }
    return ppid;
}
恐慌发生在
proc_rele()
内部,它依次称为
\u lck\u mtx\u lock
。据我所知,这里使用的
proc\u rele()
是绝对正确的。在整个kext中没有其他调用
proc\u find()
proc\u self()
,因此原因不应该是代码中其他地方缺少
proc\u rele()


是否有一些我没有考虑过的比赛条件或线程问题?例如,我是否需要使用锁来保护对
proc\u find()
/
proc\u rele()
的调用?

看起来不错。我怀疑您真正的bug在其他地方——可能是代码中其他地方的过度发布,或者内存覆盖。各种公共的
proc.*
KPI已经为您完成了所有必要的锁定。如果找不到问题,请在问题中添加更多与程序相关的代码。我觉得很好。我怀疑您真正的bug在其他地方——可能是代码中其他地方的过度发布,或者内存覆盖。各种公共的
proc.*
KPI已经为您完成了所有必要的锁定。如果找不到问题,请从kext中添加更多与proc相关的代码。