fix zero sleep stress problem. Reference: /n/sources/patch/applied/fossil-sleep-stress Date: Thu Mar 26 23:31:56 CET 2009 Signed-off-by: cinap_lenrek@gmx.de --- /sys/src/cmd/fossil/periodic.c Thu Mar 26 23:28:54 2009 +++ /sys/src/cmd/fossil/periodic.c Thu Mar 26 23:28:41 2009 @@ -51,31 +51,29 @@ periodicThread(void *a) { Periodic *p = a; - double t, ct, ts; + vlong ts, ct, t; vtThreadSetName("periodic"); - ct = nsec()*1e-6; + ct = nsec()/1000000; t = ct + p->msec; for(;;){ - /* skip missed */ - while(t <= ct) - t += p->msec; - ts = t - ct; if(ts > 1000) ts = 1000; sleep(ts); - ct = nsec()*1e-6; vtLock(p->lk); if(p->die){ vtUnlock(p->lk); break; } - if(t <= ct){ + ct = nsec()/1000000; + if(ct >= t){ p->f(p->a); - t += p->msec; + ct = nsec()/1000000; + while(t <= ct) + t += p->msec; } vtUnlock(p->lk); }