From eb3c84de5fe12831d386d15452aeb7658841e072 Mon Sep 17 00:00:00 2001 From: David Engel Date: Mon, 12 Oct 2020 15:36:27 -0500 Subject: [PATCH] Fix longstanding issue with Scheduler::getConflicting(). Somewhere along the line, probably in a refactoring or cleanup, getConflicting() was broken by making it use FindNextConflict(). The problem is that FindNextConflict() strictly checks inputs and when getConflicting() is called, the inputs for non-recording programs have already been removed. This fix adds an ignoreinput parameter to be used when FindNextConflict() is called from getConflicting(). (cherry picked from commit 93c278d430c9f7252aff762783556568433cda02) --- mythtv/programs/mythbackend/scheduler.cpp | 8 +++++--- mythtv/programs/mythbackend/scheduler.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp index b787be27ce3..383f3c91ba5 100644 --- a/mythtv/programs/mythbackend/scheduler.cpp +++ b/mythtv/programs/mythbackend/scheduler.cpp @@ -1065,7 +1065,8 @@ bool Scheduler::FindNextConflict( const RecordingInfo *p, RecConstIter &iter, OpenEndType openEnd, - uint *paffinity) const + uint *paffinity, + bool ignoreinput) const { uint affinity = 0; for ( ; iter != cardlist.end(); ++iter) @@ -1082,7 +1083,7 @@ bool Scheduler::FindNextConflict( if (debugConflicts) msg = QString("comparing with '%1' ").arg(q->GetTitle()); - if (p->GetInputID() != q->GetInputID()) + if (p->GetInputID() != q->GetInputID() && !ignoreinput) { const vector &conflicting_inputs = m_sinputInfoMap[p->GetInputID()].m_conflictingInputs; @@ -1715,7 +1716,8 @@ void Scheduler::getConflicting(RecordingInfo *pginfo, RecList *retlist) QReadLocker tvlocker(&TVRec::s_inputsLock); RecConstIter i = m_recList.begin(); - for (; FindNextConflict(m_recList, pginfo, i); ++i) + for (; FindNextConflict(m_recList, pginfo, i, openEndNever, + nullptr, true); ++i) { const RecordingInfo *p = *i; retlist->push_back(new RecordingInfo(*p)); diff --git a/mythtv/programs/mythbackend/scheduler.h b/mythtv/programs/mythbackend/scheduler.h index d0cb90cac9c..bc8050c5f91 100644 --- a/mythtv/programs/mythbackend/scheduler.h +++ b/mythtv/programs/mythbackend/scheduler.h @@ -158,7 +158,8 @@ class Scheduler : public MThread, public MythScheduler bool FindNextConflict(const RecList &cardlist, const RecordingInfo *p, RecConstIter &iter, OpenEndType openEnd = openEndNever, - uint *paffinity = nullptr) const; + uint *paffinity = nullptr, + bool ignoreinput = false) const; const RecordingInfo *FindConflict(const RecordingInfo *p, OpenEndType openEnd = openEndNever, uint *affinity = nullptr,