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.
This commit is contained in:
parent
3dde3e513b
commit
b5b26198a7
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user