From de0d29c8b6e3a1f9a0b07d82a07d9a2dd85a3973 Mon Sep 17 00:00:00 2001 From: "Andrew M. Bishop" Date: Sun, 24 Jul 2011 14:32:48 +0100 Subject: [PATCH] Do not allow EIT to prevent backend shutdown through last minute reschedules. Closes #3597 Signed-off-by: Stuart Morgan --- mythtv/programs/mythbackend/scheduler.cpp | 20 ++++++++++++-------- mythtv/programs/mythbackend/scheduler.h | 3 ++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp index a393af89179..e07f7c4a676 100644 --- a/mythtv/programs/mythbackend/scheduler.cpp +++ b/mythtv/programs/mythbackend/scheduler.cpp @@ -1914,7 +1914,8 @@ void Scheduler::run(void) if ((idleTimeoutSecs > 0) && (m_mainServer != NULL)) { HandleIdleShutdown(blockShutdown, idleSince, prerollseconds, - idleTimeoutSecs, idleWaitForRecordingTime); + idleTimeoutSecs, idleWaitForRecordingTime, + statuschanged); } } @@ -2511,7 +2512,8 @@ void Scheduler::HandleTuning(RecordingInfo &ri, bool &statuschanged) void Scheduler::HandleIdleShutdown( bool &blockShutdown, QDateTime &idleSince, - int prerollseconds, int idleTimeoutSecs, int idleWaitForRecordingTime) + int prerollseconds, int idleTimeoutSecs, int idleWaitForRecordingTime, + bool &statuschanged) { if ((idleTimeoutSecs <= 0) || (m_mainServer == NULL)) return; @@ -2545,8 +2547,11 @@ void Scheduler::HandleIdleShutdown( } resetIdleTime_lock.unlock(); - if (!idleSince.isValid()) + if (statuschanged || !idleSince.isValid()) { + if (!idleSince.isValid()) + idleSince = curtime; + RecIter idleIter = reclist.begin(); for ( ; idleIter != reclist.end(); ++idleIter) if ((*idleIter)->GetRecordingStatus() == @@ -2557,17 +2562,16 @@ void Scheduler::HandleIdleShutdown( { if (curtime.secsTo ((*idleIter)->GetRecordingStartTime()) - - prerollseconds > + prerollseconds < (idleWaitForRecordingTime * 60) + idleTimeoutSecs) { - idleSince = curtime; + idleSince = QDateTime(); } } - else - idleSince = curtime; } - else + + if (idleSince.isValid()) { // is the machine already idling the timeout time? if (idleSince.addSecs(idleTimeoutSecs) < curtime) diff --git a/mythtv/programs/mythbackend/scheduler.h b/mythtv/programs/mythbackend/scheduler.h index af8053686af..b439ad38ff4 100644 --- a/mythtv/programs/mythbackend/scheduler.h +++ b/mythtv/programs/mythbackend/scheduler.h @@ -165,7 +165,8 @@ class Scheduler : public QThread RecordingInfo &ri, RecStatusTypes recStatus, const QString &details); void HandleIdleShutdown( bool &blockShutdown, QDateTime &idleSince, int prerollseconds, - int idleTimeoutSecs, int idleWaitForRecordingTime); + int idleTimeoutSecs, int idleWaitForRecordingTime, + bool &statuschanged); MythDeque reschedQueue;