diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 40c0d56e..ae1e3410 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -469,6 +469,7 @@ Oliver Lorei Andreas Böttger for reporting a bug in skipping forward in time shift mode near the end of the recording + for fixing setting system time to avoid time jumps in case of faulty data Onno Kreuzinger for reporting leftover references to the file FORMATS in MANUAL and svdrp.c diff --git a/HISTORY b/HISTORY index 695d76d3..8110a215 100644 --- a/HISTORY +++ b/HISTORY @@ -3668,3 +3668,5 @@ Video Disk Recorder Revision History a forced EPG scan works even if EPG scan timeout is set to 0 (thanks to Bernhard Stegmaier for reporting a problem with this). - Fixed cDvbSpuBitmap::putPixel() (thanks to Reinhard Nissl). +- Fixed setting system time to avoid time jumps in case of faulty data (thanks + to Andreas Böttger). diff --git a/eit.c b/eit.c index ef21e327..42229f8f 100644 --- a/eit.c +++ b/eit.c @@ -8,7 +8,7 @@ * Robert Schneider and Rolf Hakenes . * Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg . * - * $Id: eit.c 1.108 2005/06/11 15:31:21 kls Exp $ + * $Id: eit.c 1.109 2005/08/07 13:52:29 kls Exp $ */ #include "eit.h" @@ -252,11 +252,13 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data) class cTDT : public SI::TDT { private: static cMutex mutex; + static int lastDiff; public: cTDT(const u_char *Data); }; cMutex cTDT::mutex; +int cTDT::lastDiff = 0; cTDT::cTDT(const u_char *Data) :SI::TDT(Data, false) @@ -266,12 +268,16 @@ cTDT::cTDT(const u_char *Data) time_t sattim = getTime(); time_t loctim = time(NULL); - if (abs(sattim - loctim) > 2) { + int diff = abs(sattim - loctim); + if (diff > 2) { mutex.Lock(); - isyslog("System Time = %s (%ld)\n", *TimeToString(loctim), loctim); - isyslog("Local Time = %s (%ld)\n", *TimeToString(sattim), sattim); - if (stime(&sattim) < 0) - esyslog("ERROR while setting system time: %m"); + if (abs(diff - lastDiff) < 3) { + isyslog("System Time = %s (%ld)\n", *TimeToString(loctim), loctim); + isyslog("Local Time = %s (%ld)\n", *TimeToString(sattim), sattim); + if (stime(&sattim) < 0) + esyslog("ERROR while setting system time: %m"); + } + lastDiff = diff; mutex.Unlock(); } }