Messages in this thread | | | Date | Wed, 30 Nov 2005 14:23:44 +0300 | From | Oleg Nesterov <> | Subject | Re: [PATCH 1/9] timer locking optimization |
| |
Roman Zippel wrote: > > int __mod_timer(struct timer_list *timer, unsigned long expires) > @@ -210,6 +203,7 @@ int __mod_timer(struct timer_list *timer > > BUG_ON(!timer->function); > > +restart: > base = lock_timer_base(timer, &flags); > > if (timer_pending(timer)) {
Another problem. __mode_timer() does:
if (timer_pending(timer)) { detach_timer(timer, 0);
Note that 'clear_pending' parameter == 0. This means that detach_timer() will remove the timer from list, but won't clear 'pending' status. So this will crash after 'goto restart' (or in case of concurrent del_timer()).
Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |