Hallo,
im Zusammenahang mit dem von mir gepflegten VDR-Wakeup Projekt ist ein Fehler in timers.c in der GetNextActiveTimer Funktion aufgefallen.
Wird der VDR bei laufender Aufnahme runtergefahren, wird nicht der nächste Timer zurückgegeben, sondern die Startzeit des laufenden Timers, die ja in der Vergangenheit liegt. Dies sollte bei fast allen Wakeupprojekten (NVRAM, ACPI-Wakeup, Hardwarewakeup) dazu führen das der Rechner nie mehr aufwacht, da die programmierte Zeit in der Vergangenheit ja nie erreicht wird.
Dies tritt zum Beispiel auf, wenn man Timeshifting nutzt anschließend einfach den VDR ausschaltet.
Zur Verdeutlichung ein Auszug aus der /var/log/messages:
Nov 23 23:32:23 vdrjepsen vdr[661]: Power button pressed
Nov 23 23:32:23 vdrjepsen vdr[661]: confirm: Aufnahme läuft - trotzdem ausschalten?
Nov 23 23:32:28 vdrjepsen vdr[661]: confirmed
Nov 23 23:32:28 vdrjepsen vdr[661]: confirm: Taste drücken um Shutdown abzubrechen
Nov 23 23:32:34 vdrjepsen vdr[661]: confirmed
Nov 23 23:32:34 vdrjepsen vdr[661]: executing '/usr/bin/shutdownvdr 1101245580 -3568 5 "TV total" 1'
Nov 23 23:32:36 vdrjepsen vdr-addon-hw-wakeup: echo ATS22282311 > /dev/ttyS1
Nov 23 23:32:36 vdrjepsen vdr-addon-hw-wakeup: echo RTS2332352311042 > /dev/ttyS1
Die beigefügten Patches für V1.2.6 und V1.3.17 umgehen das Problem, indem sie Timer mit Startzeiten in der Vergangenheit nicht berücksichtigen.
ZitatAlles anzeigencTimer *cTimers::GetNextActiveTimer(void)
{
cTimer *t0 = NULL;
cTimer *tnow = new cTimer(true, false);
for (cTimer *ti = First(); ti; ti = Next(ti)) {
if (ti->Active() && *tnow < *ti && (!t0 *ti < *t0))
t0 = ti;
}
delete tnow;
return t0;
}
Patchen mit z.b:
cd /usr/src/VDR (pfad von timers.c)
patch < vdr-getnexttimer-1.2.6.diff
Tschüss Frank
26.11.04: Kleines Update im 1.3.17 Patch