From 661da094e14b6ab76eae98a5eeb2c3ac6c914df4 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 2 Dec 2006 10:35:27 +0100 Subject: [PATCH] Now calling cPluginManager::Active() only if VDR is really trying to shut down, and waiting for 5 minutes before calling it again --- CONTRIBUTORS | 4 ++++ HISTORY | 4 ++++ vdr.c | 8 ++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c7869564..2a9ee3d1 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1476,6 +1476,7 @@ Udo Richter for suggesting that the function cThread::Cancel() should only set 'running' to false and not actually kill the thread if the special value -1 is given or fixing a possible segfault in cSkins::Message() + for some hints on how to improve handling cPluginManager::Active() Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date @@ -2038,3 +2039,6 @@ Boguslaw Juza Ulf Kiener for reporting a problem with audio track descriptions in the DVD plugin after a replay has been stopped + +Jörg Wendel + for reporting that cPlugin::Active() was called too often diff --git a/HISTORY b/HISTORY index a68ce996..7aeb1345 100644 --- a/HISTORY +++ b/HISTORY @@ -5002,3 +5002,7 @@ Video Disk Recorder Revision History - Added a missing 'const' to cRecordingInfo::ChannelID() (reported by Andreas Brugger). This required the APIVERSION to be increased, so plugins will have to be recompiled. +- Now calling cPluginManager::Active() only if VDR is really trying to shut down, + and waiting for 5 minutes before calling it again (thanks to Jörg Wendel for + reporting that cPlugin::Active() was called too often, and to Udo Richter for + some hints on how to improve this). diff --git a/vdr.c b/vdr.c index 73c5c918..d3ecc31a 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.280 2006/10/14 10:01:32 kls Exp $ + * $Id: vdr.c 1.281 2006/12/02 10:33:35 kls Exp $ */ #include @@ -1154,11 +1154,15 @@ int main(int argc, char *argv[]) Skins.Message(mtInfo, tr("Editing process finished")); } } - if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && !cPluginManager::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { + if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { time_t Now = time(NULL); if (Now - LastActivity > ACTIVITYTIMEOUT) { // Shutdown: if (Shutdown && (Setup.MinUserInactivity || LastActivity == 1) && Now - LastActivity > Setup.MinUserInactivity * 60) { + if (!ForceShutdown && cPluginManager::Active()) { + LastActivity = Now - Setup.MinUserInactivity * 60 + SHUTDOWNRETRY; // try again later + continue; + } cTimer *timer = Timers.GetNextActiveTimer(); time_t Next = timer ? timer->StartTime() : 0; time_t Delta = timer ? Next - Now : 0;