svn commit: r184259 - in stable/7/sys: . kern
David Xu
davidxu at FreeBSD.org
Sat Oct 25 11:37:43 UTC 2008
Author: davidxu
Date: Sat Oct 25 11:37:42 2008
New Revision: 184259
URL: http://svn.freebsd.org/changeset/base/184259
Log:
Merge revision 184067 from head to stable/7:
In realtimer_delete(), clear timer's value and interval to tell
realtimer_expire() to not rearm the timer, otherwise there is a
chance that a callout will be left there and be tiggered in future
unexpectly.
Approved by: re (kib)
Modified:
stable/7/sys/ (props changed)
stable/7/sys/kern/kern_time.c
Modified: stable/7/sys/kern/kern_time.c
==============================================================================
--- stable/7/sys/kern/kern_time.c Sat Oct 25 10:55:49 2008 (r184258)
+++ stable/7/sys/kern/kern_time.c Sat Oct 25 11:37:42 2008 (r184259)
@@ -1225,6 +1225,12 @@ realtimer_delete(struct itimer *it)
{
mtx_assert(&it->it_mtx, MA_OWNED);
+ /*
+ * clear timer's value and interval to tell realtimer_expire
+ * to not rearm the timer.
+ */
+ timespecclear(&it->it_time.it_value);
+ timespecclear(&it->it_time.it_interval);
ITIMER_UNLOCK(it);
callout_drain(&it->it_callout);
ITIMER_LOCK(it);
@@ -1374,9 +1380,11 @@ realtimer_expire(void *arg)
callout_reset(&it->it_callout, tvtohz(&tv),
realtimer_expire, it);
}
+ itimer_enter(it);
ITIMER_UNLOCK(it);
itimer_fire(it);
ITIMER_LOCK(it);
+ itimer_leave(it);
} else if (timespecisset(&it->it_time.it_value)) {
ts = it->it_time.it_value;
timespecsub(&ts, &cts);
More information about the svn-src-stable
mailing list