Messages in this thread | | | Date | Mon, 20 Aug 2012 16:59:19 +0200 | From | Oleg Nesterov <> | Subject | Re: lockdep trace from posix timers |
| |
On 08/20, Peter Zijlstra wrote: > > task_work_cancel(struct task_struct *task, task_work_func_t func) > { > ... > + > +again: > + workp = &task->task_works; > + work = *workp; > + while (work) { > + if (work->func == func) {
But this all can race with task_work_run() if task != current.
This "work" can be freed/reused. And it should only return !NULL if twork->func() was not called.
Oleg.
| |