summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY4
-rw-r--r--timers.c21
3 files changed, 17 insertions, 9 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 0711b5bf..6ea191ea 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -2839,6 +2839,7 @@ Johann Friedrichs <johann.friedrichs@web.de>
be an abandoned member of class cSchedulesLock
for fixing handling VPS events outside the LingerLimit, which could cause recordings to
stop prematurely
+ for fixing handling timers during the change from DST to winter time
Timo Helkio <timolavi@mbnet.fi>
for reporting a hangup when replaying a TS recording with subtitles activated
diff --git a/HISTORY b/HISTORY
index ddd9044a..8b793f05 100644
--- a/HISTORY
+++ b/HISTORY
@@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History
a subdirectory.
- SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details).
-2017-11-11: Version 2.3.9
+2017-11-12: Version 2.3.9
- Updated the Italian OSD texts (thanks to Diego Pierotto).
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
@@ -9199,3 +9199,5 @@ Video Disk Recorder Revision History
- The new SVDRP commands 'LSTD' and 'PRIM' can be used to list all available devices
and to switch the primary device (thanks to Thomas Reufer).
- Added some comments regarding font height (thanks to Thomas Reufer).
+- Fixed handling timers during the change from DST to winter time (thanks to Johann
+ Friedrichs).
diff --git a/timers.c b/timers.c
index 6859eece..9d28f922 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 4.13 2017/11/09 12:10:46 kls Exp $
+ * $Id: timers.c 4.14 2017/11/12 13:01:22 kls Exp $
*/
#include "timers.h"
@@ -419,20 +419,25 @@ bool cTimer::Matches(time_t t, bool Directly, int Margin) const
t = time(NULL);
int begin = TimeToInt(start); // seconds from midnight
- int length = TimeToInt(stop) - begin;
- if (length < 0)
- length += SECSINDAY;
+ int end = TimeToInt(stop);
+ int length = end - begin;
if (IsSingleEvent()) {
- startTime = SetTime(day, begin);
- stopTime = startTime + length;
+ time_t t0 = day;
+ startTime = SetTime(t0, begin);
+ if (length < 0)
+ t0 = IncDay(day, 1);
+ stopTime = SetTime(t0, end);
}
else {
+ time_t d = day ? max(day, t) : t;
for (int i = -1; i <= 7; i++) {
- time_t t0 = IncDay(day ? max(day, t) : t, i);
+ time_t t0 = IncDay(d, i);
if (DayMatches(t0)) {
time_t a = SetTime(t0, begin);
- time_t b = a + length;
+ if (length < 0)
+ t0 = IncDay(d, i + 1);
+ time_t b = SetTime(t0, end);
if ((!day || a >= day) && t < b) {
startTime = a;
stopTime = b;