Y2031 problem in tst-fseek.c ...

Dan Kegel dank@kegel.com
Thu Jul 31 13:43:00 GMT 2003


Denis Vlasenko wrote:
> On 25 July 2003 07:03, Dan Kegel wrote:
> 
>>OK, not that this is pressing or anything, but
>>IIRC in the year 2031, time() will go negative,
>>and for the next bunch of years, the sequence
>>    t0 = time(0);
>>    sleep(1);
>>    t1 = time(0);
>>    assert(t1 > t0);
>>will fail.
> 
> 
> -2 > -3

(sorry for the pedantic waste of bandwidth...)
Sure, but if the sleep(1) occurs right at rollover, the
test will fail spuriously.  This is not a serious worry,
but since the fix is so simple, it seems worth doing as
a matter of course: just turn the >'s into subtractions:
     t0 = time(0);
     sleep(1);
     t1 = time(0);
     dt = t1 - t0;
     assert(dt > 0);
Nothing fancy there, and yet it won't fail at wraparound.
You can even make the test stronger, if you know the program
isn't going to be swapped out for more than N seconds,
by verifying that dt is less than or equal to N.

This is more important when dealing with timers that
roll over more frequently.
- Dan

-- 
Dan Kegel
http://www.kegel.com
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=78045



More information about the Libc-alpha mailing list