Ticket #10771: 10771-v1.patch

File 10771-v1.patch, 4.1 KB (added by danielk, 7 years ago)

Possible fix -- patch against master

  • mythtv/libs/libmythtv/eitscanner.cpp

    diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
    index 2e42bd5..08a8ac4 100644
    a b void EITScanner::run(void) 
    133133            if (!(*activeScanNextChan).isEmpty())
    134134            {
    135135                eitHelper->WriteEITCache();
    136                 rec->SetChannel(*activeScanNextChan, TVRec::kFlagEITScan);
    137                 LOG(VB_EIT, LOG_INFO,
    138                     LOC_ID + QString("Now looking for EIT data on "
    139                                      "multiplex of channel %1")
    140                         .arg(*activeScanNextChan));
     136                if (rec->EITRequestChannel(*activeScanNextChan))
     137                {
     138                    lock.lock();
     139                    while (activeScan && !exitThread)
     140                    {
     141                        if (rec->EITChannelTuned())
     142                        {
     143                            LOG(VB_EIT, LOG_INFO,
     144                                LOC_ID + QString("Now looking for EIT data on "
     145                                                 "multiplex of channel %1")
     146                                .arg(*activeScanNextChan));
     147                            break;
     148                        }
     149                        exitThreadCond.wait(&lock, 50); // sleep up to 50 ms.
     150                    }
     151                    lock.unlock();
     152                }
    141153            }
    142154
    143155            activeScanNextTrig = QDateTime::currentDateTime()
  • mythtv/libs/libmythtv/tv_rec.cpp

    diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
    index a5d4986..84124e2 100644
    a b QString TVRec::SetInput(QString input, uint requestType) 
    30033003 */
    30043004void TVRec::SetChannel(QString name, uint requestType)
    30053005{
    3006     if (TVRec::kFlagEITScan == requestType)
    3007     {
    3008         if (!stateChangeLock.tryLock())
    3009         {
    3010             LOG(VB_CHANNEL, LOG_INFO, LOC +
    3011                 QString("SetChannel(%1, kFlagEITScan) -- "
    3012                         "couldn't get lock aborting").arg(name));
    3013             return;
    3014         }
    3015     }
    3016     else
    3017     {
    3018         stateChangeLock.lock();
    3019     }
     3006    stateChangeLock.lock();
    30203007
    30213008    LOG(VB_CHANNEL, LOG_INFO, LOC +
    30223009        QString("SetChannel(%1) -- begin").arg(name));
    void TVRec::SetChannel(QString name, uint requestType) 
    30463033    stateChangeLock.unlock();
    30473034}
    30483035
     3036bool TVRec::EITRequestChannel(const QString &name)
     3037{
     3038    if (!stateChangeLock.tryLock())
     3039    {
     3040        LOG(VB_CHANNEL, LOG_INFO, LOC +
     3041            QString("RequestEITChannel(%1) -- "
     3042                    "couldn't get lock aborting").arg(name));
     3043        return false;
     3044    }
     3045
     3046    LOG(VB_CHANNEL, LOG_INFO, LOC +
     3047        QString("RequestEITChannel(%1)").arg(name));
     3048
     3049    // Actually add the tuning request to the queue, and
     3050    // then wait for it to start tuning
     3051    tuningRequests.enqueue(TuningRequest(TVRec::kFlagEITScan, name));
     3052
     3053    stateChangeLock.unlock();
     3054    return true;
     3055}
     3056
     3057bool TVRec::EITChannelTuned(void) const
     3058{
     3059    if (stateChangeLock.tryLock())
     3060    {
     3061        return tuningRequests.empty() && !changeState;
     3062        stateChangeLock.unlock();
     3063    }
     3064    return false;
     3065}
     3066
    30493067void TVRec::GetNextProgram(BrowseDirection direction,
    30503068                           QString &title,       QString &subtitle,
    30513069                           QString &desc,        QString &category,
  • mythtv/libs/libmythtv/tv_rec.h

    diff --git a/mythtv/libs/libmythtv/tv_rec.h b/mythtv/libs/libmythtv/tv_rec.h
    index ce54bff..4bcd781 100644
    a b class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable 
    199199        { SetChannel(QString("NextChannel %1").arg((int)dir)); }
    200200    void SetChannel(QString name, uint requestType = kFlagDetect);
    201201
     202    bool EITRequestChannel(const QString &name);
     203    bool EITChannelTuned(void) const;
     204
    202205    int SetSignalMonitoringRate(int msec, int notifyFrontend = 1);
    203206    int  GetPictureAttribute(PictureAttribute attr);
    204207    int  ChangePictureAttribute(PictureAdjustType type, PictureAttribute attr,