From 6f93a5f7819b3c7030a5b199e502bedd4eb7844c Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 24 Oct 2004 18:00:00 +0200 Subject: =?UTF-8?q?Version=201.3.14=20-=20Fixed=20detecting=20transponder?= =?UTF-8?q?=20lock=20in=20cDvbTuner=20(based=20on=20a=20patch=20from=20Ste?= =?UTF-8?q?fan=20=20=20Meyknecht).=20-=20What=20was=20previously=20marked?= =?UTF-8?q?=20with=20WAIT=5FFOR=5FLOCK=5FAFTER=5FTUNING=20is=20now=20perma?= =?UTF-8?q?nently=20=20=20active=20and=20uses=20a=20cCondVar=20to=20signal?= =?UTF-8?q?=20when=20a=20transponder=20is=20locked.=20-=20Added=20some=20m?= =?UTF-8?q?issing=20'const'=20to=20cChannel.=20-=20Added=20a=20sample=20se?= =?UTF-8?q?tup=20for=20'DisiCon-4=20Single=20Cable=20Network'=20to=20'dise?= =?UTF-8?q?qc.conf'=20=20=20(thanks=20to=20Oliver=20Endriss).=20-=20Fixed?= =?UTF-8?q?=20attaching=20a=20cPlayer=20to=20a=20cDevice,=20so=20that=20'O?= =?UTF-8?q?peration=20not=20permitted'=20=20=20errors=20don't=20occur=20an?= =?UTF-8?q?y=20more=20(thanks=20to=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20F?= =?UTF-8?q?ixed=20a=20case=20where=20the=20resultBuffer=20in=20cRemux=20ra?= =?UTF-8?q?n=20full=20before=20getting=20a=20sync.=20-=20Removed=20the=20u?= =?UTF-8?q?sleep()=20call=20from=20cDvbPlayer::Action()=20to=20make=20VDR?= =?UTF-8?q?=20run=20on=20NPTL=20=20=20systems=20(thanks=20to=20Alfred=20Za?= =?UTF-8?q?strow).=20The=20NPTL=20check=20at=20startup=20has=20also=20been?= =?UTF-8?q?=20=20=20removed.=20-=20Taking=20the=20complete=20size=20of=20a?= =?UTF-8?q?vailable=20data=20into=20account=20when=20deciding=20whether=20?= =?UTF-8?q?=20=20to=20clear=20the=20transfer=20buffer=20to=20avoid=20overf?= =?UTF-8?q?lows=20(thanks=20to=20Reinhard=20Nissl).=20-=20Updated=20Romani?= =?UTF-8?q?an=20language=20texts=20and=20the=20iso8859-2=20fonts=20(thanks?= =?UTF-8?q?=20to=20Lucian=20Muresan).=20-=20Now=20actually=20using=20the?= =?UTF-8?q?=20iso8859-15=20fonts=20(thanks=20to=20Lucian=20Muresan).=20-?= =?UTF-8?q?=20Some=20minor=20code=20cleanups=20(thanks=20to=20Prakash=20K.?= =?UTF-8?q?=20Cheemplavam).=20-=20Fixed=20missing=20cleanup=20at=20program?= =?UTF-8?q?=20exit=20in=20case=20there=20is=20a=20problem=20with=20a=20plu?= =?UTF-8?q?gin=20=20=20(thanks=20to=20Mattias=20Gr=C3=B6nlund=20for=20poin?= =?UTF-8?q?ting=20this=20out).=20-=20Increased=20the=20required=20free=20b?= =?UTF-8?q?uffer=20space=20in=20the=20resultBuffer=20of=20cRemux=20to=20?= =?UTF-8?q?=20=202=20*=20IPACKS=20to=20avoid=20a=20buffer=20overflow=20in?= =?UTF-8?q?=20case=20a=20cTS2PES=20writes=20one=20complete=20=20=20packet?= =?UTF-8?q?=20and=20then=20(within=20processing=20the=20same=20TS=20packet?= =?UTF-8?q?)=20wants=20to=20write=20another=20=20=20small=20packet.=20-=20?= =?UTF-8?q?Removed=20the=20signal=20handler=20and=20WakeUp()=20call=20from?= =?UTF-8?q?=20cThread=20(it=20is=20no=20longer=20=20=20needed).=20-=20Adde?= =?UTF-8?q?d=20some=20checks=20when=20canceling=20a=20thread=20and=20remov?= =?UTF-8?q?ed=20the=20usleep()=20in=20=20=20cThread::Start()=20(suggested?= =?UTF-8?q?=20by=20Ludwig=20Nussel).=20Also=20removed=20'running'=20from?= =?UTF-8?q?=20=20=20cThread=20and=20using=20only=20childTid=20to=20indicat?= =?UTF-8?q?e=20whether=20a=20thread=20is=20actually=20=20=20running.=20-?= =?UTF-8?q?=20Added=20cCondWait::Sleep()=20and=20using=20it=20to=20replace?= =?UTF-8?q?=20all=20usleep()=20calls=20(based=20=20=20on=20a=20suggestion?= =?UTF-8?q?=20by=20Werner=20Fink).=20-=20Only=20assigning=20events=20to=20?= =?UTF-8?q?timers=20if=20the=20related=20schedule=20has=20actually=20been?= =?UTF-8?q?=20=20=20modified.=20-=20When=20searching=20for=20the=20present?= =?UTF-8?q?=20event,=20the=20running=20status=20is=20now=20only=20taken=20?= =?UTF-8?q?=20=20into=20account=20if=20the=20event=20has=20been=20"seen"?= =?UTF-8?q?=20within=20the=20past=2030=20seconds.=20=20=20This=20avoids=20?= =?UTF-8?q?shortly=20seeing=20the=20wrong=20events=20in=20the=20channel=20?= =?UTF-8?q?display=20when=20=20=20switching=20to=20a=20channel=20that=20ha?= =?UTF-8?q?sn't=20been=20tuned=20to=20in=20a=20while.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vdr.c | 68 +++++++++++++++++++++++++++++-------------------------------------- 1 file changed, 29 insertions(+), 39 deletions(-) (limited to 'vdr.c') diff --git a/vdr.c b/vdr.c index 6d76f17..033f186 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.187 2004/10/17 11:50:21 kls Exp $ + * $Id: vdr.c 1.190 2004/10/24 14:01:11 kls Exp $ */ #include @@ -64,6 +64,8 @@ #define MANUALSTART 600 // seconds the next timer must be in the future to assume manual start #define CHANNELSAVEDELTA 600 // seconds before saving channels.conf after automatic modifications +#define EXIT(v) { ExitCode = (v); goto Exit; } + static int Interrupted = 0; static void SignalHandler(int signum) @@ -85,17 +87,6 @@ static void Watchdog(int signum) int main(int argc, char *argv[]) { -#ifdef _CS_GNU_LIBPTHREAD_VERSION - // Check for NPTL and exit if present - VDR apparently doesn't run well with NPTL: - char LibPthreadVersion[128]; - if (confstr(_CS_GNU_LIBPTHREAD_VERSION, LibPthreadVersion, sizeof(LibPthreadVersion)) > 0) { - if (strstr(LibPthreadVersion, "NPTL")) { - fprintf(stderr, "vdr: please turn off NPTL by setting 'export LD_ASSUME_KERNEL=2.4.1' before starting VDR\n"); - return 2; - } - } -#endif - // Check for UTF-8 and exit if present - asprintf() will fail if it encounters 8 bit ASCII codes char *LangEnv; if ((LangEnv = getenv("LANG")) != NULL && strcasestr(LangEnv, "utf") || @@ -133,6 +124,7 @@ int main(int argc, char *argv[]) const char *Terminal = NULL; const char *Shutdown = NULL; cPluginManager PluginManager(DEFAULTPLUGINDIR); + int ExitCode = 0; static struct option long_options[] = { { "audio", required_argument, NULL, 'a' }, @@ -358,7 +350,7 @@ int main(int argc, char *argv[]) // Load plugins: if (!PluginManager.LoadPlugins(true)) - return 2; + EXIT(2); // Configuration data: @@ -380,7 +372,7 @@ int main(int argc, char *argv[]) Keys.Load(AddDirectory(ConfigDirectory, "remote.conf")) && KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true) )) - return 2; + EXIT(2); cFont::SetCode(I18nCharSets()[Setup.OSDLanguage]); @@ -402,7 +394,7 @@ int main(int argc, char *argv[]) // Initialize plugins: if (!PluginManager.InitializePlugins()) - return 2; + EXIT(2); // Primary device: @@ -425,12 +417,12 @@ int main(int argc, char *argv[]) fprintf(stderr, "vdr: %s\n", msg); esyslog("ERROR: %s", msg); if (!cDevice::SetPrimaryDevice(1)) - return 2; + EXIT(2); if (!cDevice::PrimaryDevice()) { const char *msg = "no primary device found - giving up!"; fprintf(stderr, "vdr: %s\n", msg); esyslog("ERROR: %s", msg); - return 2; + EXIT(2); } } } @@ -442,7 +434,7 @@ int main(int argc, char *argv[]) // Start plugins: if (!PluginManager.StartPlugins()) - return 2; + EXIT(2); // Skins: @@ -498,18 +490,18 @@ int main(int argc, char *argv[]) // Main program loop: - cOsdObject *Menu = NULL; - cOsdObject *Temp = NULL; - int LastChannel = -1; - int LastTimerChannel = -1; - int PreviousChannel[2] = { 1, 1 }; - int PreviousChannelIndex = 0; - time_t LastChannelChanged = time(NULL); - time_t LastActivity = 0; - int MaxLatencyTime = 0; - bool ForceShutdown = false; - bool UserShutdown = false; - bool TimerInVpsMargin = false; + static cOsdObject *Menu = NULL; + static cOsdObject *Temp = NULL; + static int LastChannel = -1; + static int LastTimerChannel = -1; + static int PreviousChannel[2] = { 1, 1 }; + static int PreviousChannelIndex = 0; + static time_t LastChannelChanged = time(NULL); + static time_t LastActivity = 0; + static int MaxLatencyTime = 0; + static bool ForceShutdown = false; + static bool UserShutdown = false; + static bool TimerInVpsMargin = false; while (!Interrupted) { // Handle emergency exits: @@ -589,14 +581,9 @@ int main(int argc, char *argv[]) // Timers and Recordings: if (!Timers.BeingEdited()) { // Assign events to timers: - if (time(NULL) - LastActivity > 10) { - static time_t LastSetEvents = 0;//XXX trigger by actual EPG data modification??? - if (time(NULL) - LastSetEvents > 5) { - Timers.SetEvents(); - LastSetEvents = time(NULL); - } - } - time_t Now = time(NULL); // must do all following calls with the exact same time! + Timers.SetEvents(); + // Must do all following calls with the exact same time! + time_t Now = time(NULL); // Process ongoing recordings: cRecordControls::Process(Now); // Start new recordings: @@ -898,6 +885,9 @@ int main(int argc, char *argv[]) } if (Interrupted) isyslog("caught signal %d", Interrupted); + +Exit: + cRecordControls::Shutdown(); cCutter::Stop(); delete Menu; @@ -924,5 +914,5 @@ int main(int argc, char *argv[]) esyslog("emergency exit!"); return 1; } - return 0; + return ExitCode; } -- cgit v1.2.3