将struct传递给函数指针 - 值更改

时间:2014-01-30 13:54:29

标签: c pointers struct linux-kernel function-pointers

我正在研究一个使用struct作为函数参数的内核线程。

我像这样传递了它

   int thread_function(void* data)
{
    struct killStruct* obj = (struct killStruct*) data;
    //msleep((unsigned int) time);
    printk(KERN_INFO"From the inner Thread: PID: %d, Time:%ld\n",obj->pid,obj->millisecondsToKill);
    //kill prozess by ID
    return 0;
}

static void prozess_kill(struct killStruct *obj)
{
    printk(KERN_INFO "Outside of thread PID: %d, Time:%ld",obj->pid,obj->millisecondsToKill);
    task = kthread_run(&thread_function,(void*)obj ,"str");
}

由于一些奇怪的原因,pid的值在线程外部不同于线程内部。

事实上它记录了:

[12160.460200] Outside of thread PID: 1, Time:1000
[12160.460400] From the inner Thread: PID: 622736, Time:1000

这里发生了什么?

注意:我检查了pid的其他值。它总是最终为622736

1 个答案:

答案 0 :(得分:0)

关闭这个问题,如果有人遇到同样的问题:

我在线程之外提出了结构。由于某种原因,在引用进入函数之前执行了释放。这导致了奇怪的错误,我通过将kfree放在另一个位置来解决它。