summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2012-03-04 12:05:56 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2012-03-04 12:05:56 +0100
commit4bdc69eb92dd149a519cb44939cc0f8868c3ecd8 (patch)
tree4fb59dd445a75bf65867caeef17f54167f64297a
parentf35e4acf887a7fa065d0c2addc0a33a3885b1ae0 (diff)
downloadvdr-4bdc69eb92dd149a519cb44939cc0f8868c3ecd8.tar.gz
vdr-4bdc69eb92dd149a519cb44939cc0f8868c3ecd8.tar.bz2
Fixed a possible race condition with the SVDRP commands CLRE and PUTE
-rw-r--r--HISTORY5
-rw-r--r--svdrp.c11
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: