Ticket #13571: 20200513-encoderlink-revert.patch

File 20200513-encoderlink-revert.patch, 14.4 KB (added by Klaas de Waal, 5 months ago)

Test patch for reverting all foreach loops over m_encoderLink/m_tvLink in mainserver.cpp and scheduler.cpp to iterator loops as done in v30.

  • mythtv/programs/mythbackend/mainserver.cpp

    diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp
    index ef16e5539c..f7048351ce 100644
    a b void MainServer::HandleAnnounce(QStringList &slist, QStringList commands, 
    18631863
    18641864        bool wasAsleep = true;
    18651865        TVRec::s_inputsLock.lockForRead();
     1866#if 1   // KdW test
     1867        for (auto iter = m_encoderList->begin(); iter != m_encoderList->end(); ++iter)
     1868        {
     1869            EncoderLink *elink = *iter;
     1870#else
    18661871        foreach (auto elink, *m_encoderList)
    18671872        {
     1873#endif
    18681874            if (elink->GetHostName() == commands[2])
    18691875            {
    18701876                if (! (elink->IsWaking() || elink->IsAsleep()))
    void MainServer::DoHandleStopRecording( 
    29192925
    29202926            elink->StopRecording();
    29212927
     2928            // KdW test -- Crash test loop
     2929 #if 0
     2930            for (int i=0; i<200000; i++)
     2931            {
     2932                int j = 0;
     2933                for (auto iter2 = m_encoderList->begin(); iter2 != m_encoderList->end(); ++iter2)       // crash in here
     2934                // for (auto iter2 = m_encoderList->cbegin(); iter2 != m_encoderList->cend(); ++iter2)  // no crash when using const
     2935                {
     2936                    j++;
     2937                    EncoderLink *elink2 = *iter2;
     2938                    if (elink2->IsLocal())
     2939                    {
     2940                        (void) iter2.key();
     2941                    }
     2942                }
     2943            }
     2944 #endif
     2945
    29222946            while (elink->IsBusyRecording() ||
    29232947                   elink->GetState() == kState_ChangingState)
    29242948            {
    void MainServer::HandleLockTuner(PlaybackSock *pbs, int cardid) 
    42384262    QString enchost;
    42394263
    42404264    TVRec::s_inputsLock.lockForRead();
     4265#if 1   // KdW test
     4266    QMap<int, EncoderLink *>::Iterator iter = m_encoderList->begin();
     4267    for (; iter != m_encoderList->end(); ++iter)
     4268    {
     4269        EncoderLink *elink = *iter;
     4270#else
    42414271    foreach (auto elink, *m_encoderList)
    42424272    {
     4273#endif
    42434274        // we're looking for a specific card but this isn't the one we want
    42444275        if ((cardid != -1) && (cardid != elink->GetInputID()))
    42454276            continue;
    void MainServer::HandleGetFreeInputInfo(PlaybackSock *pbs, 
    43634394    // Lopp over each encoder and divide the inputs into busy and free
    43644395    // lists.
    43654396    TVRec::s_inputsLock.lockForRead();
     4397#if 1   // KdW test
     4398    QMap<int, EncoderLink *>::Iterator iter = m_encoderList->begin();
     4399    for (; iter != m_encoderList->end(); ++iter)
     4400    {
     4401        EncoderLink *elink = *iter;
     4402#else
    43664403    foreach (auto elink, *m_encoderList)
    43674404    {
     4405#endif
    43684406        InputInfo info;
    43694407        info.m_inputId = elink->GetInputID();
    43704408
    void MainServer::HandleSetChannelInfo(QStringList &slist, PlaybackSock *pbs) 
    48954933    }
    48964934
    48974935    TVRec::s_inputsLock.lockForRead();
     4936#if 1   // KdW test
     4937    QMap<int, EncoderLink *>::iterator it = m_encoderList->begin();
     4938    for (; it != m_encoderList->end(); ++it)
     4939    {
     4940        if (*it)
     4941        {
     4942            ok &= (*it)->SetChannelInfo(chanid, sourceid, oldcnum,
     4943                                        callsign, channum, channame, xmltv);
     4944        }
     4945    }
     4946#else
    48984947    foreach (auto & encoder, *m_encoderList)
    48994948    {
    49004949        if (encoder)
    void MainServer::HandleSetChannelInfo(QStringList &slist, PlaybackSock *pbs) 
    49034952                                        callsign, channum, channame, xmltv);
    49044953        }
    49054954    }
     4955#endif
    49064956    TVRec::s_inputsLock.unlock();
    49074957
    49084958    retlist << ((ok) ? "1" : "0");
    size_t MainServer::GetCurrentMaxBitrate(void) 
    50915141    size_t totalKBperMin = 0;
    50925142
    50935143    TVRec::s_inputsLock.lockForRead();
     5144#if 1   // KdW test
     5145    QMap<int, EncoderLink*>::iterator it = m_encoderList->begin();
     5146    for (; it != m_encoderList->end(); ++it)
     5147    {
     5148        EncoderLink *enc = *it;
     5149#else
    50945150    foreach (auto enc, *m_encoderList)
    50955151    {
     5152#endif
    50965153        if (!enc->IsConnected() || !enc->IsBusy())
    50975154            continue;
    50985155
    void MainServer::HandleIsRecording(QStringList &slist, PlaybackSock *pbs) 
    73287385    QStringList retlist;
    73297386
    73307387    TVRec::s_inputsLock.lockForRead();
     7388#if 1   // KdW test
     7389    QMap<int, EncoderLink *>::Iterator iter = m_encoderList->begin();
     7390    for (; iter != m_encoderList->end(); ++iter)
     7391    {
     7392        EncoderLink *elink = *iter;
     7393#else
    73317394    foreach (auto elink, *m_encoderList)
    73327395    {
     7396#endif
    73337397        if (elink->IsBusyRecording()) {
    73347398            RecordingsInProgress++;
    73357399
    void MainServer::connectionClosed(MythSocket *socket) 
    77937857
    77947858                bool isFallingAsleep = true;
    77957859                TVRec::s_inputsLock.lockForRead();
     7860#if 1   // KdW test
     7861                QMap<int, EncoderLink *>::Iterator iter = m_encoderList->begin();
     7862                for (; iter != m_encoderList->end(); ++iter)
     7863                {
     7864                    EncoderLink *elink = *iter;
     7865#else
    77967866                foreach (auto elink, *m_encoderList)
    77977867                {
     7868#endif
    77987869                    if (elink->GetSocket() == pbs)
    77997870                    {
    78007871                        if (!elink->IsFallingAsleep())
    void MainServer::connectionClosed(MythSocket *socket) 
    78347905                if (chain->HostSocketCount() == 0)
    78357906                {
    78367907                    TVRec::s_inputsLock.lockForRead();
     7908#if 1   // KdW test
     7909                    for (auto it2 = m_encoderList->begin(); it2 != m_encoderList->end(); ++it2)
     7910                    {
     7911                        EncoderLink *enc = *it2;
     7912#else
    78377913                    foreach (auto enc, *m_encoderList)
    78387914                    {
     7915#endif
    78397916                        if (enc->IsLocal())
    78407917                        {
    78417918                            while (enc->GetState() == kState_ChangingState)
    void MainServer::reconnectTimeout(void) 
    81818258    QStringList strlist( str );
    81828259
    81838260    TVRec::s_inputsLock.lockForRead();
     8261#if 1   // KdW test
     8262    QMap<int, EncoderLink *>::Iterator iter = m_encoderList->begin();
     8263    for (; iter != m_encoderList->end(); ++iter)
     8264    {
     8265        EncoderLink *elink = *iter;
     8266#else
    81848267    foreach (auto elink, *m_encoderList)
    81858268    {
     8269#endif
    81868270        elink->CancelNextRecording(true);
    81878271        ProgramInfo *pinfo = elink->GetRecording();
    81888272        if (pinfo)
    void MainServer::UpdateSystemdStatus (void) 
    83548438    {
    83558439        int active = 0;
    83568440        TVRec::s_inputsLock.lockForRead();
     8441#if 1   // KdW test HIT
     8442        for (auto iter = m_encoderList->begin(); iter != m_encoderList->end(); ++iter)
     8443        {
     8444            EncoderLink *elink = *iter;
     8445#else
    83578446        foreach (auto elink, *m_encoderList)
    83588447        {
     8448#endif
    83598449            if (not elink->IsLocal())
    83608450                continue;
    83618451            switch (elink->GetState())
  • mythtv/programs/mythbackend/scheduler.cpp

    diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp
    index 2a1173df95..25277a8909 100644
    a b void Scheduler::HandleWakeSlave(RecordingInfo &ri, int prerollseconds) 
    26072607                    "to reschedule around its tuners.")
    26082608                .arg(nexttv->GetHostName()));
    26092609
     2610#if 1   // KdW test
     2611        QMap<int, EncoderLink*>::iterator it = m_tvList->begin();
     2612        for (; it != m_tvList->end(); ++it)
     2613        {
     2614            if ((*it)->GetHostName() == nexttv->GetHostName())
     2615                (*it)->SetSleepStatus(sStatus_Undefined);
     2616        }
     2617#else
    26102618        foreach (auto & enc, *m_tvList)
    26112619        {
    26122620            if (enc->GetHostName() == nexttv->GetHostName())
    26132621                enc->SetSleepStatus(sStatus_Undefined);
    26142622        }
     2623#endif
    26152624
    26162625        EnqueuePlace("HandleWakeSlave3");
    26172626    }
    bool Scheduler::HandleRecording( 
    27642773                        "to reschedule around its tuners.")
    27652774                    .arg(nexttv->GetHostName()));
    27662775
     2776#if 1   // KdW test
     2777            QMap<int, EncoderLink *>::Iterator enciter =
     2778                m_tvList->begin();
     2779            for (; enciter != m_tvList->end(); ++enciter)
     2780            {
     2781                EncoderLink *enc = *enciter;
     2782#else
    27672783            foreach (auto enc, *m_tvList)
    27682784            {
     2785#endif
    27692786                if (enc->GetHostName() == nexttv->GetHostName())
    27702787                    enc->SetSleepStatus(sStatus_Undefined);
    27712788            }
    void Scheduler::PutInactiveSlavesToSleep(void) 
    34523469    QReadLocker tvlocker(&TVRec::s_inputsLock);
    34533470
    34543471    bool someSlavesCanSleep = false;
     3472#if 1   // KdW test
     3473    QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     3474    for (; enciter != m_tvList->end(); ++enciter)
     3475    {
     3476        EncoderLink *enc = *enciter;
     3477#else
    34553478    foreach (auto enc, *m_tvList)
    34563479    {
     3480#endif
    34573481        if (enc->CanSleep())
    34583482            someSlavesCanSleep = true;
    34593483    }
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35333557    LOG(VB_SCHEDULE, LOG_DEBUG, QString("  Shutting down slaves which will "
    35343558        "be inactive for the next %1 minutes and can be put to sleep.")
    35353559            .arg(sleepThreshold / 60));
    3536 
     3560#if 1   // KdW test
     3561    enciter = m_tvList->begin();
     3562    for (; enciter != m_tvList->end(); ++enciter)
     3563    {
     3564        EncoderLink *enc = *enciter;
     3565#else
    35373566    foreach (auto enc, *m_tvList)
    35383567    {
     3568#endif
    35393569        if ((!enc->IsLocal()) &&
    35403570            (enc->IsAwake()) &&
    35413571            (!SlavesInUse.contains(enc->GetHostName())) &&
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35583588
    35593589                if (enc->GoToSleep())
    35603590                {
     3591#if 1   // KdW test
     3592                    QMap<int, EncoderLink *>::Iterator slviter =
     3593                        m_tvList->begin();
     3594                    for (; slviter != m_tvList->end(); ++slviter)
     3595                    {
     3596                        EncoderLink *slv = *slviter;
     3597#else
    35613598                    foreach (auto slv, *m_tvList)
    35623599                    {
     3600#endif
    35633601                        if (slv->GetHostName() == thisHost)
    35643602                        {
    35653603                            LOG(VB_SCHEDULE, LOG_DEBUG,
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35763614                    LOG(VB_GENERAL, LOG_ERR, LOC +
    35773615                        QString("Unable to shutdown %1 slave backend, setting "
    35783616                                "sleep status to undefined.").arg(thisHost));
     3617#if 1   // KdW test
     3618                    QMap<int, EncoderLink *>::Iterator slviter =
     3619                        m_tvList->begin();
     3620                    for (; slviter != m_tvList->end(); ++slviter)
     3621                    {
     3622                        EncoderLink *slv = *slviter;
     3623#else
    35793624                    foreach (auto slv, *m_tvList)
    35803625                    {
     3626#endif
    35813627                        if (slv->GetHostName() == thisHost)
    35823628                            slv->SetSleepStatus(sStatus_Undefined);
    35833629                    }
    bool Scheduler::WakeUpSlave(const QString& slaveHostname, bool setWakingStatus) 
    36053651        LOG(VB_GENERAL, LOG_NOTICE,
    36063652            QString("Trying to Wake Up %1, but this slave "
    36073653                    "does not have a WakeUpCommand set.").arg(slaveHostname));
    3608 
     3654#if 1   // KdW test
     3655        QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     3656        for (; enciter != m_tvList->end(); ++enciter)
     3657        {
     3658            EncoderLink *enc = *enciter;
     3659#else
    36093660        foreach (auto enc, *m_tvList)
    36103661        {
     3662#endif
    36113663            if (enc->GetHostName() == slaveHostname)
    36123664                enc->SetSleepStatus(sStatus_Undefined);
    36133665        }
    bool Scheduler::WakeUpSlave(const QString& slaveHostname, bool setWakingStatus) 
    36163668    }
    36173669
    36183670    QDateTime curtime = MythDate::current();
     3671#if 1   // KdW test
     3672    QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     3673    for (; enciter != m_tvList->end(); ++enciter)
     3674    {
     3675        EncoderLink *enc = *enciter;
     3676#else
    36193677    foreach (auto enc, *m_tvList)
    36203678    {
     3679#endif
    36213680        if (setWakingStatus && (enc->GetHostName() == slaveHostname))
    36223681            enc->SetSleepStatus(sStatus_Waking);
    36233682        enc->SetLastWakeTime(curtime);
    void Scheduler::WakeUpSlaves(void) 
    36403699
    36413700    QStringList SlavesThatCanWake;
    36423701    QString thisSlave;
     3702#if 1   // KdW test
     3703    QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     3704    for (; enciter != m_tvList->end(); ++enciter)
     3705    {
     3706        EncoderLink *enc = *enciter;
     3707#else
    36433708    foreach (auto enc, *m_tvList)
    36443709    {
     3710#endif
    36453711        if (enc->IsLocal())
    36463712            continue;
    36473713
    void Scheduler::AddNewRecords(void) 
    43144380    RecList tmpList;
    43154381
    43164382    QMap<int, bool> cardMap;
     4383#if 1   // KdW test HIT
     4384    QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     4385    for (; enciter != m_tvList->end(); ++enciter)
     4386    {
     4387        EncoderLink *enc = *enciter;
     4388#else
    43174389    foreach (auto enc, *m_tvList)
    43184390    {
     4391#endif
    43194392        if (enc->IsConnected() || enc->IsAsleep())
    43204393            cardMap[enc->GetInputID()] = true;
    43214394    }
    int Scheduler::FillRecordingDir( 
    54475520                        QString backuppath = expire->GetPathname();
    54485521                        ProgramInfo *programinfo = expire;
    54495522                        bool foundSlave = false;
    5450 
     5523#if 1   // KdW test
     5524                        QMap<int, EncoderLink *>::Iterator enciter =
     5525                            m_tvList->begin();
     5526                        for (; enciter != m_tvList->end(); ++enciter)
     5527                        {
     5528                            if ((*enciter)->GetHostName() ==
     5529                                programinfo->GetHostname())
     5530                            {
     5531                                (*enciter)->CheckFile(programinfo);
     5532                                foundSlave = true;
     5533                                break;
     5534                            }
     5535                        }
     5536#else
    54515537                        foreach (auto & enc, *m_tvList)
    54525538                        {
    54535539                            if (enc->GetHostName() ==
    int Scheduler::FillRecordingDir( 
    54585544                                break;
    54595545                            }
    54605546                        }
     5547#endif
    54615548                        if (foundSlave &&
    54625549                            programinfo->GetPathname() == filename)
    54635550                        {
    void Scheduler::SchedLiveTV(void) 
    56065693        return;
    56075694
    56085695    // Build a list of active livetv programs
     5696#if 1  // KdW test
     5697    QMap<int, EncoderLink *>::Iterator enciter = m_tvList->begin();
     5698    for (; enciter != m_tvList->end(); ++enciter)
     5699    {
     5700        EncoderLink *enc = *enciter;
     5701#else
    56095702    foreach (auto enc, *m_tvList)
    56105703    {
     5704#endif
    56115705        if (kState_WatchingLiveTV != enc->GetState())
    56125706            continue;
    56135707