svn commit: r184385 - head/sys/kern

Peter Wemm peter at FreeBSD.org
Mon Oct 27 20:26:26 PDT 2008


Author: peter
Date: Tue Oct 28 03:26:25 2008
New Revision: 184385
URL: http://svn.freebsd.org/changeset/base/184385

Log:
  After a machine has been up for a bit more than 20 days with HZ=1000,
  "ticks" goes negative.  This breaks the signed comparison in softclock.
  This causes sleep() to never wake up, tcp to stop, etc etc.  This is
  bad(TM).  Use the SEQ_LT() method from tcp's sequence number comparisons.

Modified:
  head/sys/kern/kern_timeout.c

Modified: head/sys/kern/kern_timeout.c
==============================================================================
--- head/sys/kern/kern_timeout.c	Tue Oct 28 02:15:17 2008	(r184384)
+++ head/sys/kern/kern_timeout.c	Tue Oct 28 03:26:25 2008	(r184385)
@@ -233,7 +233,7 @@ callout_tick(void)
 	need_softclock = 0;
 	cc = CC_SELF();
 	mtx_lock_spin_flags(&cc->cc_lock, MTX_QUIET);
-	for (; cc->cc_softticks < ticks; cc->cc_softticks++) {
+	for (; (cc->cc_softticks - ticks) < 0; cc->cc_softticks++) {
 		bucket = cc->cc_softticks & callwheelmask;
 		if (!TAILQ_EMPTY(&cc->cc_callwheel[bucket])) {
 			need_softclock = 1;


More information about the svn-src-head mailing list