diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 9e865a94..aa2d9967 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3672,6 +3672,8 @@ J use VPS and fully overlaps a second event that is longer than the original one for reporting a missing EPISODE macro expansion in case the event doesn't yet have a short text when generating the pattern timer file name + for reporting a problem with spawned timers jumping to the next event in case + Setup.EPGLinger is very small Stefan Verse for fixing an occasional black screen when switching channels diff --git a/HISTORY b/HISTORY index 6beb0cf2..4e05870d 100644 --- a/HISTORY +++ b/HISTORY @@ -9662,3 +9662,9 @@ Video Disk Recorder Revision History the start/stop times of timers in the main menu. - EXPIRELATENCY now only applies to VPS timers. - Deleting expired timers is now triggered immediately after the timers are modified. + +2021-04-28: + +- Now using a separate fixed value for internal EPG linger time. This fixes problems with + spawned timers jumping to the next event in case Setup.EPGLinger is very small. (reported + by Jürgen Schneider). diff --git a/eit.c b/eit.c index 404cd9dd..b06a1368 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 5.2 2021/04/04 11:06:30 kls Exp $ + * $Id: eit.c 5.3 2021/04/28 20:44:56 kls Exp $ */ // The various ways in which broadcasters handle (or screw up) their EPG: @@ -133,7 +133,7 @@ cEIT::cEIT(cEitTablesHash &EitTablesHash, int Source, u_char Tid, const u_char * bool Empty = true; bool Modified = false; - time_t LingerLimit = Now - Setup.EPGLinger * 60; + time_t LingerLimit = Now - EPG_LINGER_TIME; time_t SegmentStart = 0; // these are actually "section" start/end times time_t SegmentEnd = 0; struct tm t = { 0 }; diff --git a/epg.c b/epg.c index 2f1d2a23..7178d740 100644 --- a/epg.c +++ b/epg.c @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.c 5.4 2021/04/13 13:35:17 kls Exp $ + * $Id: epg.c 5.5 2021/04/28 20:44:56 kls Exp $ */ #include "epg.h" @@ -450,7 +450,7 @@ cString cEvent::GetVpsString(void) const void cEvent::Dump(FILE *f, const char *Prefix, bool InfoOnly) const { - if (InfoOnly || startTime + duration + Setup.EPGLinger * 60 >= time(NULL)) { + if (InfoOnly || startTime + duration + EPG_LINGER_TIME >= time(NULL)) { fprintf(f, "%sE %u %ld %d %X %X\n", Prefix, eventID, startTime, duration, tableID, version); if (!isempty(title)) fprintf(f, "%sT %s\n", Prefix, title); @@ -1135,7 +1135,7 @@ void cSchedule::Cleanup(time_t Time) { cEvent *Event; while ((Event = events.First()) != NULL) { - if (!Event->HasTimer() && Event->EndTime() + Setup.EPGLinger * 60 < Time) + if (!Event->HasTimer() && Event->EndTime() + EPG_LINGER_TIME < Time) DelEvent(Event); else break; diff --git a/epg.h b/epg.h index b3ed6201..e4689251 100644 --- a/epg.h +++ b/epg.h @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.h 5.1 2021/04/04 11:06:30 kls Exp $ + * $Id: epg.h 5.2 2021/04/28 20:44:56 kls Exp $ */ #ifndef __EPG_H @@ -20,6 +20,8 @@ #define MAXEPGBUGFIXLEVEL 3 +#define EPG_LINGER_TIME (max(Setup.EPGLinger, 180) * 60) // seconds to keep old EPG data (internal, must be at least Setup.EPGLinger) + enum { MaxEventContents = 4 }; enum eEventContentGroup {