mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
Revert "Fix cpu timers exit deadlock and races"
Revert commit e03d13e985
, to be replaced
by a much nicer fix from Roland.
This commit is contained in:
parent
0213df7431
commit
9465bee863
1 changed files with 17 additions and 11 deletions
|
@ -387,19 +387,25 @@ int posix_cpu_timer_del(struct k_itimer *timer)
|
||||||
if (unlikely(p == NULL))
|
if (unlikely(p == NULL))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
spin_lock(&p->sighand->siglock);
|
|
||||||
if (!list_empty(&timer->it.cpu.entry)) {
|
if (!list_empty(&timer->it.cpu.entry)) {
|
||||||
/*
|
read_lock(&tasklist_lock);
|
||||||
* Take us off the task's timer list. We don't need to
|
if (unlikely(p->signal == NULL)) {
|
||||||
* take tasklist_lock and check for the task being reaped.
|
/*
|
||||||
* If it was reaped, it already called posix_cpu_timers_exit
|
* We raced with the reaping of the task.
|
||||||
* and posix_cpu_timers_exit_group to clear all the timers
|
* The deletion should have cleared us off the list.
|
||||||
* that pointed to it.
|
*/
|
||||||
*/
|
BUG_ON(!list_empty(&timer->it.cpu.entry));
|
||||||
list_del(&timer->it.cpu.entry);
|
} else {
|
||||||
put_task_struct(p);
|
/*
|
||||||
|
* Take us off the task's timer list.
|
||||||
|
*/
|
||||||
|
spin_lock(&p->sighand->siglock);
|
||||||
|
list_del(&timer->it.cpu.entry);
|
||||||
|
spin_unlock(&p->sighand->siglock);
|
||||||
|
}
|
||||||
|
read_unlock(&tasklist_lock);
|
||||||
}
|
}
|
||||||
spin_unlock(&p->sighand->siglock);
|
put_task_struct(p);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue