[news.software.nntp] nntpd time warp bug

leres@ace.ee.lbl.gov (Craig Leres) (11/15/89)

Yesterday I was pawing through the nntp logfiles and happened to
noticed some unusual entries, for example:

    Nov 13 13:22:59 helios nntpd[21705]: pi6.lbl.gov times user 0.6 system 0.5 elapsed -0.8

The bug is in serve(). Cleverly, the start and finish times are being
calculated by subtracting the microseconds from the seconds... A
context diff is appened. (We're running 1.5.6 but I checked and the bug
is in 1.5.7 too.)

		Craig
------
RCS file: RCS/serve.c,v
retrieving revision 1.7
diff -c -r1.7 serve.c
*** /tmp/,RCSt1a14346	Tue Nov 14 21:55:34 1989
--- serve.c	Tue Nov 14 21:57:24 1989
***************
*** 215,221 ****
  	timeptr = ctime(&start);
  #else not USG
  	(void) gettimeofday(&start, (struct timezone *)NULL);
! 	Tstart = (double) start.tv_sec - ((double)start.tv_usec)/1000000.0;
  	timeptr = ctime(&start.tv_sec);
  #endif not USG
  	if ((cp = index(timeptr, '\n')) != NULL)
--- 215,221 ----
  	timeptr = ctime(&start);
  #else not USG
  	(void) gettimeofday(&start, (struct timezone *)NULL);
! 	Tstart = (double) start.tv_sec + ((double)start.tv_usec)/1000000.0;
  	timeptr = ctime(&start.tv_sec);
  #endif not USG
  	if ((cp = index(timeptr, '\n')) != NULL)
***************
*** 329,335 ****
  	sys  = (double)(cpu.tms_stime + cpu.tms_cstime) / HZ;
  #else not USG
  	(void) gettimeofday(&finish, (struct timezone *)NULL);
! 	Tfinish = (double) finish.tv_sec - ((double)finish.tv_usec)/1000000.0;
  
  	(void) getrusage(RUSAGE_SELF, &me);
  	(void) getrusage(RUSAGE_CHILDREN, &kids);
--- 329,335 ----
  	sys  = (double)(cpu.tms_stime + cpu.tms_cstime) / HZ;
  #else not USG
  	(void) gettimeofday(&finish, (struct timezone *)NULL);
! 	Tfinish = (double) finish.tv_sec + ((double)finish.tv_usec)/1000000.0;
  
  	(void) getrusage(RUSAGE_SELF, &me);
  	(void) getrusage(RUSAGE_CHILDREN, &kids);