2014-01-30 4 views
1

Я работаю над потоком ядра, который использует аргумент struct как функцию.Передача struct to function pointer - Изменения значения

Я передал его как этот

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"); 
} 

По какой-то странной причине значение ПИД-регулятора отличается вне нити, чем внутри нити.

На самом деле он записывает:

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

Что здесь происходит?

Примечание: Я проверил другие значения для pid. Это всегда заканчивается как 622736

+1

В C нет необходимости указывать указатели на 'void *'. Любой указатель может быть неявно преобразован в 'void *'. –

+1

Как вы называете 'prozess_kill'? Какова продолжительность жизни объекта 'killStruct'? –

+1

Может быть изменен другим процессом. Попробуйте malloc некоторую память и скопируйте данные и передайте их в "thread_function", чтобы увидеть разницу. –

ответ

0

Чтобы закрыть этот вопрос, и если кто-аутсайдеров в одной и той же проблемой:

Я jfreed на-структуру вне потока. По какой-то причине освобождение было выполнено до того, как ссылка была внутри функции. Это вызвало странную ошибку, и я решил ее, поставив kfree в другую позицию.