diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2006-01-20 13:42:38 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2006-01-20 13:42:38 +0100 |
commit | cd09f7a0dfad60a9451b30fc2c4261a3c867beee (patch) | |
tree | 871ce2bf1582a2c63a5968a3d02a57ea3cafd8db | |
parent | ef385702d0d821f9d7efebef1e87d4e9da9db721 (diff) | |
download | vdr-cd09f7a0dfad60a9451b30fc2c4261a3c867beee.tar.gz vdr-cd09f7a0dfad60a9451b30fc2c4261a3c867beee.tar.bz2 |
Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule' pointers from cChannel objects
-rw-r--r-- | CONTRIBUTORS | 3 | ||||
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | epg.c | 7 |
3 files changed, 10 insertions, 2 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 2d4eb0d8..fe0481ae 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1667,3 +1667,6 @@ Francois-Xavier Kowalski <francois-xavier.kowalski@hp.com> Franz Gangkofer <Franz.Gangkofer@cadsoft.de> for reporting a problem with @plugin in keymacros.conf in case the named plugin is not loaded + +Malte Schröder <MalteSch@gmx.de> + for reporting a crash after executing the SVDRP command CLRE @@ -4198,3 +4198,5 @@ Video Disk Recorder Revision History the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski). - Fixed a problem with @plugin in keymacros.conf in case the named plugin is not loaded (reported by Franz Gangkofer). +- Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule' + pointers from cChannel objects (reported by Malte Schröder). @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>. * - * $Id: epg.c 1.49 2006/01/15 13:58:30 kls Exp $ + * $Id: epg.c 1.50 2006/01/20 13:42:38 kls Exp $ */ #include "epg.h" @@ -935,7 +935,10 @@ bool cSchedules::ClearAll(void) cSchedulesLock SchedulesLock(true, 1000); cSchedules *s = (cSchedules *)Schedules(SchedulesLock); if (s) { - s->Clear(); + for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) + Timer->SetEvent(NULL); + for (cSchedule *Schedule = s->First(); Schedule; Schedule = s->Next(Schedule)) + Schedule->Cleanup(INT_MAX); return true; } return false; |