1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed a possible race condition with the SVDRP commands CLRE and PUTE

This commit is contained in:
Klaus Schmidinger 2012-03-04 12:05:56 +01:00
parent f35e4acf88
commit 4bdc69eb92
2 changed files with 12 additions and 4 deletions

View File

@ -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 which was made in version 1.1.10, so please report if this has any unwanted
side effects. 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). - 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 - 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 - The replay progress display is now turned on whenever a mark is toggled (not
only when one is set). only when one is set).
- Toggling a mark now restarts the timeout of the replay progress display. - 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.

11
svdrp.c
View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured * and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection. * 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" #include "svdrp.h"
@ -601,9 +601,13 @@ void cSVDRP::CmdCLRE(const char *Option)
Reply(501, "Undefined channel \"%s\"", Option); Reply(501, "Undefined channel \"%s\"", Option);
} }
else { else {
cSchedules::ClearAll();
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); 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()); Reply(PUTEhandler->Status(), "%s", PUTEhandler->Message());
DELETENULL(PUTEhandler); DELETENULL(PUTEhandler);
} }
cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); // re-trigger the timeout, in case there is very much EPG data
return; return;
} }
// skip leading whitespace: // skip leading whitespace: