From 2772964f99e7b14888d1faf4a2d3915e54f3e924 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 11 Feb 2012 13:41:29 +0100 Subject: [PATCH] The epg.data file is now read in a separate thread --- CONTRIBUTORS | 1 + HISTORY | 4 +++- epg.c | 14 +++++++++++++- epg.h | 8 +++++++- vdr.c | 5 +++-- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 9ba9c0fa..8a9f0e1f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -604,6 +604,7 @@ Helmut Auer for a patch that was used to implement the command line options --edit and --genindex for suggesting to disable EPG processing for a while after a CLRE command + for suggesting to read the epg.data file in a separate thread Jeremy Hall for fixing an incomplete initialization of the filter parameters in eit.c diff --git a/HISTORY b/HISTORY index 81117f0a..749b0eb6 100644 --- a/HISTORY +++ b/HISTORY @@ -6836,7 +6836,7 @@ Video Disk Recorder Revision History - Fixed frozen live view with device bonding in case the bonded master is used for live viewing (reported by Uwe Scheffler). -2012-01-26: Version 1.7.24 +2012-02-11: Version 1.7.24 - Updated the Italian OSD texts (thanks to Diego Pierotto). - Fixed a high load in case a transponder can't be received. @@ -6851,3 +6851,5 @@ Video Disk Recorder Revision History minutes (thanks to Christoph Haubrich). - Symbolic links are no longer resolved in cRecordings::ScanVideoDir() (thanks to Sundararaj Reel). +- The epg.data file is now read in a separate thread to make the startup process + faster in case the file is very large (suggested by Helmut Auer). diff --git a/epg.c b/epg.c index e1e317d5..0cce64d9 100644 --- a/epg.c +++ b/epg.c @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.c 2.8 2012/01/08 14:59:38 kls Exp $ + * $Id: epg.c 2.9 2012/02/11 12:33:04 kls Exp $ */ #include "epg.h" @@ -1284,3 +1284,15 @@ const cSchedule *cSchedules::GetSchedule(const cChannel *Channel, bool AddIfMiss } return Channel->schedule != &DummySchedule? Channel->schedule : NULL; } + +// --- cEpgDataReader -------------------------------------------------------- + +cEpgDataReader::cEpgDataReader(void) +:cThread("epg data reader") +{ +} + +void cEpgDataReader::Action(void) +{ + cSchedules::Read(); +} diff --git a/epg.h b/epg.h index e5f4bdae..9d6b605b 100644 --- a/epg.h +++ b/epg.h @@ -7,7 +7,7 @@ * Original version (as used in VDR before 1.3.0) written by * Robert Schneider and Rolf Hakenes . * - * $Id: epg.h 2.5 2011/02/25 14:14:38 kls Exp $ + * $Id: epg.h 2.6 2012/02/11 12:29:55 kls Exp $ */ #ifndef __EPG_H @@ -213,6 +213,12 @@ public: const cSchedule *GetSchedule(const cChannel *Channel, bool AddIfMissing = false) const; }; +class cEpgDataReader : public cThread { +public: + cEpgDataReader(void); + virtual void Action(void); + }; + void ReportEpgBugFixStats(bool Reset = false); #endif //__EPG_H diff --git a/vdr.c b/vdr.c index 3d79eef4..0913614f 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.tvdr.de * - * $Id: vdr.c 2.27 2011/12/03 15:35:09 kls Exp $ + * $Id: vdr.c 2.28 2012/02/11 12:34:01 kls Exp $ */ #include @@ -569,6 +569,7 @@ int main(int argc, char *argv[]) // Main program loop variables - need to be here to have them initialized before any EXIT(): + cEpgDataReader EpgDataReader; cOsdObject *Menu = NULL; int LastChannel = 0; int LastTimerChannel = -1; @@ -633,7 +634,7 @@ int main(int argc, char *argv[]) cSchedules::SetEpgDataFileName(AddDirectory(EpgDirectory, EpgDataFileName)); else cSchedules::SetEpgDataFileName(EpgDataFileName); - cSchedules::Read(); + EpgDataReader.Start(); } // DVB interfaces: