From 4bdc69eb92dd149a519cb44939cc0f8868c3ecd8 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 4 Mar 2012 12:05:56 +0100 Subject: Fixed a possible race condition with the SVDRP commands CLRE and PUTE --- HISTORY | 5 ++++- svdrp.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index ccba0cd1..3a48011a 100644 --- a/HISTORY +++ b/HISTORY @@ -6960,7 +6960,7 @@ Video Disk Recorder Revision History which was made in version 1.1.10, so please report if this has any unwanted side effects. -2012-03-03: Version 1.7.26 +2012-03-04: Version 1.7.26 - Now checking for NULL in cOsd::AddPixmap() (suggested by Christoph Haubrich). - Fixed the German translation of "VDR will shut down in %s minutes" (thanks to @@ -6968,3 +6968,6 @@ Video Disk Recorder Revision History - The replay progress display is now turned on whenever a mark is toggled (not only when one is set). - Toggling a mark now restarts the timeout of the replay progress display. +- Fixed a possible race condition with the SVDRP commands CLRE and PUTE, where + EPG data from the transponder could be handled even though it shouldn't be + handled for 10 seconds. diff --git a/svdrp.c b/svdrp.c index 613a019f..01366ddf 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 2.15 2012/02/16 12:38:19 kls Exp $ + * $Id: svdrp.c 2.16 2012/03/04 12:05:56 kls Exp $ */ #include "svdrp.h" @@ -601,9 +601,13 @@ void cSVDRP::CmdCLRE(const char *Option) Reply(501, "Undefined channel \"%s\"", Option); } else { - cSchedules::ClearAll(); cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); - Reply(250, "EPG data cleared"); + if (cSchedules::ClearAll()) { + Reply(250, "EPG data cleared"); + cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); + } + else + Reply(451, "Error while clearing EPG data"); } } @@ -1600,6 +1604,7 @@ void cSVDRP::Execute(char *Cmd) Reply(PUTEhandler->Status(), "%s", PUTEhandler->Message()); DELETENULL(PUTEhandler); } + cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); // re-trigger the timeout, in case there is very much EPG data return; } // skip leading whitespace: -- cgit v1.2.3