Unfortunately we run logrotate more than once a day, and it was bogus all day after turning daylight saving on. It seems to be because the "struct tm" fields are initialized with the current date, time 0:00, but with the current time's daylight saving settings. But at 0:00 the tm_isdst was different than the "current" tm_isdst, which causes the mktime+localtime pair to "correct" it by setting the local time back one hour to yesterday's 23:00.

Later, when this structure is filled with today's date from the state file, the tm_isdst is out of sync again, so the next mktime+localtime pair "corrects" it again by setting the clock forward, which will overflow to tomorrow, hence the error messages.

I think initializing the structure with not the current time's tm_isdst, but today 0:00's tm_isdst will fix this issue. If the times are stored with day granularity then the daylight saving state should be also computed similarly.

Best regards


Gergely Péli

Reply via email to