|
@@ -605,13 +605,14 @@ static struct k_itimer * lock_timer(timer_t timer_id, unsigned long *flags)
|
|
|
timr = (struct k_itimer *) idr_find(&posix_timers_id, (int) timer_id);
|
|
|
if (timr) {
|
|
|
spin_lock(&timr->it_lock);
|
|
|
- spin_unlock(&idr_lock);
|
|
|
|
|
|
if ((timr->it_id != timer_id) || !(timr->it_process) ||
|
|
|
timr->it_process->tgid != current->tgid) {
|
|
|
- unlock_timer(timr, *flags);
|
|
|
+ spin_unlock(&timr->it_lock);
|
|
|
+ spin_unlock_irqrestore(&idr_lock, *flags);
|
|
|
timr = NULL;
|
|
|
- }
|
|
|
+ } else
|
|
|
+ spin_unlock(&idr_lock);
|
|
|
} else
|
|
|
spin_unlock_irqrestore(&idr_lock, *flags);
|
|
|
|