Ticket #13571: 20200513-encoderlink-make-const.patch

File 20200513-encoderlink-make-const.patch, 11.1 KB (added by David Hampton, 5 months ago)

Alternative test patch marking list traversals as constant.

  • mythtv/programs/mythbackend/httpstatus.cpp

    diff --git a/mythtv/programs/mythbackend/httpstatus.cpp b/mythtv/programs/mythbackend/httpstatus.cpp
    index ce10b085fb..d5a7abb0af 100644
    a b void HttpStatus::FillStatusXML( QDomDocument *pDoc ) 
    197197
    198198    TVRec::s_inputsLock.lockForRead();
    199199
    200     foreach (auto elink, *m_pEncoders)
     200    for (auto * elink : qAsConst(*m_pEncoders))
    201201    {
    202202        if (elink != nullptr)
    203203        {
  • mythtv/programs/mythbackend/mainserver.cpp

    diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp
    index ef16e5539c..9e793802a5 100644
    a b void MainServer::HandleAnnounce(QStringList &slist, QStringList commands, 
    18631863
    18641864        bool wasAsleep = true;
    18651865        TVRec::s_inputsLock.lockForRead();
    1866         foreach (auto elink, *m_encoderList)
     1866        for (auto * elink : qAsConst(*m_encoderList))
    18671867        {
    18681868            if (elink->GetHostName() == commands[2])
    18691869            {
    void MainServer::DoHandleStopRecording( 
    29192919
    29202920            elink->StopRecording();
    29212921
     2922            // KdW test -- Crash test loop
     2923 #if 0
     2924            for (int i=0; i<200000; i++)
     2925            {
     2926                int j = 0;
     2927                for (auto iter2 = m_encoderList->begin(); iter2 != m_encoderList->end(); ++iter2)       // crash in here
     2928                // for (auto iter2 = m_encoderList->cbegin(); iter2 != m_encoderList->cend(); ++iter2)  // no crash when using const
     2929                {
     2930                    j++;
     2931                    EncoderLink *elink2 = *iter2;
     2932                    if (elink2->IsLocal())
     2933                    {
     2934                        (void) iter2.key();
     2935                    }
     2936                }
     2937            }
     2938 #endif
     2939
    29222940            while (elink->IsBusyRecording() ||
    29232941                   elink->GetState() == kState_ChangingState)
    29242942            {
    void MainServer::DoHandleStopRecording( 
    29302948                if (m_sched)
    29312949                    m_sched->UpdateRecStatus(&recinfo);
    29322950            }
     2951
     2952            break;
    29332953        }
    29342954    }
    29352955    TVRec::s_inputsLock.unlock();
    void MainServer::HandleLockTuner(PlaybackSock *pbs, int cardid) 
    42384258    QString enchost;
    42394259
    42404260    TVRec::s_inputsLock.lockForRead();
    4241     foreach (auto elink, *m_encoderList)
     4261    for (auto * elink : qAsConst(*m_encoderList))
    42424262    {
    42434263        // we're looking for a specific card but this isn't the one we want
    42444264        if ((cardid != -1) && (cardid != elink->GetInputID()))
    void MainServer::HandleGetFreeInputInfo(PlaybackSock *pbs, 
    43634383    // Lopp over each encoder and divide the inputs into busy and free
    43644384    // lists.
    43654385    TVRec::s_inputsLock.lockForRead();
    4366     foreach (auto elink, *m_encoderList)
     4386    for (auto * elink : qAsConst(*m_encoderList))
    43674387    {
    43684388        InputInfo info;
    43694389        info.m_inputId = elink->GetInputID();
    void MainServer::HandleSetChannelInfo(QStringList &slist, PlaybackSock *pbs) 
    48954915    }
    48964916
    48974917    TVRec::s_inputsLock.lockForRead();
    4898     foreach (auto & encoder, *m_encoderList)
     4918    for (auto * encoder : qAsConst(*m_encoderList))
    48994919    {
    49004920        if (encoder)
    49014921        {
    size_t MainServer::GetCurrentMaxBitrate(void) 
    50915111    size_t totalKBperMin = 0;
    50925112
    50935113    TVRec::s_inputsLock.lockForRead();
    5094     foreach (auto enc, *m_encoderList)
     5114    for (auto * enc : qAsConst(*m_encoderList))
    50955115    {
    50965116        if (!enc->IsConnected() || !enc->IsBusy())
    50975117            continue;
    void MainServer::HandleIsRecording(QStringList &slist, PlaybackSock *pbs) 
    73287348    QStringList retlist;
    73297349
    73307350    TVRec::s_inputsLock.lockForRead();
    7331     foreach (auto elink, *m_encoderList)
     7351    for (auto * elink : qAsConst(*m_encoderList))
    73327352    {
    73337353        if (elink->IsBusyRecording()) {
    73347354            RecordingsInProgress++;
    void MainServer::connectionClosed(MythSocket *socket) 
    77937813
    77947814                bool isFallingAsleep = true;
    77957815                TVRec::s_inputsLock.lockForRead();
    7796                 foreach (auto elink, *m_encoderList)
     7816                for (auto * elink : qAsConst(*m_encoderList))
    77977817                {
    77987818                    if (elink->GetSocket() == pbs)
    77997819                    {
    void MainServer::connectionClosed(MythSocket *socket) 
    78347854                if (chain->HostSocketCount() == 0)
    78357855                {
    78367856                    TVRec::s_inputsLock.lockForRead();
    7837                     foreach (auto enc, *m_encoderList)
     7857                    for (auto * enc : qAsConst(*m_encoderList))
    78387858                    {
    78397859                        if (enc->IsLocal())
    78407860                        {
    void MainServer::reconnectTimeout(void) 
    81818201    QStringList strlist( str );
    81828202
    81838203    TVRec::s_inputsLock.lockForRead();
    8184     foreach (auto elink, *m_encoderList)
     8204    for (auto * elink : qAsConst(*m_encoderList))
    81858205    {
    81868206        elink->CancelNextRecording(true);
    81878207        ProgramInfo *pinfo = elink->GetRecording();
    void MainServer::UpdateSystemdStatus (void) 
    83548374    {
    83558375        int active = 0;
    83568376        TVRec::s_inputsLock.lockForRead();
    8357         foreach (auto elink, *m_encoderList)
     8377        for (auto * elink : qAsConst(*m_encoderList))
    83588378        {
    83598379            if (not elink->IsLocal())
    83608380                continue;
  • mythtv/programs/mythbackend/scheduler.cpp

    diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp
    index 2a1173df95..d3312e8724 100644
    a b void Scheduler::HandleWakeSlave(RecordingInfo &ri, int prerollseconds) 
    25242524    QReadLocker tvlocker(&TVRec::s_inputsLock);
    25252525
    25262526    QMap<int, EncoderLink*>::const_iterator tvit = m_tvList->constFind(ri.GetInputID());
    2527     if (tvit == m_tvList->end())
     2527    if (tvit == m_tvList->constEnd())
    25282528        return;
    25292529
    25302530    QString sysEventKey = ri.MakeUniqueKey();
    void Scheduler::HandleWakeSlave(RecordingInfo &ri, int prerollseconds) 
    26072607                    "to reschedule around its tuners.")
    26082608                .arg(nexttv->GetHostName()));
    26092609
    2610         foreach (auto & enc, *m_tvList)
     2610        for (auto * enc : qAsConst(*m_tvList))
    26112611        {
    26122612            if (enc->GetHostName() == nexttv->GetHostName())
    26132613                enc->SetSleepStatus(sStatus_Undefined);
    bool Scheduler::HandleRecording( 
    26822682    QReadLocker tvlocker(&TVRec::s_inputsLock);
    26832683
    26842684    QMap<int, EncoderLink*>::const_iterator tvit = m_tvList->constFind(ri.GetInputID());
    2685     if (tvit == m_tvList->end())
     2685    if (tvit == m_tvList->constEnd())
    26862686    {
    26872687        QString msg = QString("Invalid cardid [%1] for %2")
    26882688            .arg(ri.GetInputID()).arg(ri.GetTitle());
    bool Scheduler::HandleRecording( 
    27642764                        "to reschedule around its tuners.")
    27652765                    .arg(nexttv->GetHostName()));
    27662766
    2767             foreach (auto enc, *m_tvList)
     2767            for (auto * enc : qAsConst(*m_tvList))
    27682768            {
    27692769                if (enc->GetHostName() == nexttv->GetHostName())
    27702770                    enc->SetSleepStatus(sStatus_Undefined);
    void Scheduler::PutInactiveSlavesToSleep(void) 
    34523452    QReadLocker tvlocker(&TVRec::s_inputsLock);
    34533453
    34543454    bool someSlavesCanSleep = false;
    3455     foreach (auto enc, *m_tvList)
     3455    for (auto * enc : qAsConst(*m_tvList))
    34563456    {
    34573457        if (enc->CanSleep())
    34583458            someSlavesCanSleep = true;
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35343534        "be inactive for the next %1 minutes and can be put to sleep.")
    35353535            .arg(sleepThreshold / 60));
    35363536
    3537     foreach (auto enc, *m_tvList)
     3537    for (auto * enc : qAsConst(*m_tvList))
    35383538    {
    35393539        if ((!enc->IsLocal()) &&
    35403540            (enc->IsAwake()) &&
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35583558
    35593559                if (enc->GoToSleep())
    35603560                {
    3561                     foreach (auto slv, *m_tvList)
     3561                    for (auto * slv : qAsConst(*m_tvList))
    35623562                    {
    35633563                        if (slv->GetHostName() == thisHost)
    35643564                        {
    void Scheduler::PutInactiveSlavesToSleep(void) 
    35763576                    LOG(VB_GENERAL, LOG_ERR, LOC +
    35773577                        QString("Unable to shutdown %1 slave backend, setting "
    35783578                                "sleep status to undefined.").arg(thisHost));
    3579                     foreach (auto slv, *m_tvList)
     3579                    for (auto * slv : qAsConst(*m_tvList))
    35803580                    {
    35813581                        if (slv->GetHostName() == thisHost)
    35823582                            slv->SetSleepStatus(sStatus_Undefined);
    bool Scheduler::WakeUpSlave(const QString& slaveHostname, bool setWakingStatus) 
    36063606            QString("Trying to Wake Up %1, but this slave "
    36073607                    "does not have a WakeUpCommand set.").arg(slaveHostname));
    36083608
    3609         foreach (auto enc, *m_tvList)
     3609        for (auto * enc : qAsConst(*m_tvList))
    36103610        {
    36113611            if (enc->GetHostName() == slaveHostname)
    36123612                enc->SetSleepStatus(sStatus_Undefined);
    bool Scheduler::WakeUpSlave(const QString& slaveHostname, bool setWakingStatus) 
    36163616    }
    36173617
    36183618    QDateTime curtime = MythDate::current();
    3619     foreach (auto enc, *m_tvList)
     3619    for (auto * enc : qAsConst(*m_tvList))
    36203620    {
    36213621        if (setWakingStatus && (enc->GetHostName() == slaveHostname))
    36223622            enc->SetSleepStatus(sStatus_Waking);
    void Scheduler::WakeUpSlaves(void) 
    36403640
    36413641    QStringList SlavesThatCanWake;
    36423642    QString thisSlave;
    3643     foreach (auto enc, *m_tvList)
     3643    for (auto * enc : qAsConst(*m_tvList))
    36443644    {
    36453645        if (enc->IsLocal())
    36463646            continue;
    void Scheduler::AddNewRecords(void) 
    43144314    RecList tmpList;
    43154315
    43164316    QMap<int, bool> cardMap;
    4317     foreach (auto enc, *m_tvList)
     4317    for (auto * enc : qAsConst(*m_tvList))
    43184318    {
    43194319        if (enc->IsConnected() || enc->IsAsleep())
    43204320            cardMap[enc->GetInputID()] = true;
    int Scheduler::FillRecordingDir( 
    54485448                        ProgramInfo *programinfo = expire;
    54495449                        bool foundSlave = false;
    54505450
    5451                         foreach (auto & enc, *m_tvList)
     5451                        for (auto * enc : qAsConst(*m_tvList))
    54525452                        {
    54535453                            if (enc->GetHostName() ==
    54545454                                programinfo->GetHostname())
    void Scheduler::SchedLiveTV(void) 
    56065606        return;
    56075607
    56085608    // Build a list of active livetv programs
    5609     foreach (auto enc, *m_tvList)
     5609    for (auto * enc : qAsConst(*m_tvList))
    56105610    {
    56115611        if (kState_WatchingLiveTV != enc->GetState())
    56125612            continue;
  • mythtv/programs/mythbackend/services/dvr.cpp

    diff --git a/mythtv/programs/mythbackend/services/dvr.cpp b/mythtv/programs/mythbackend/services/dvr.cpp
    index 91f47b7c19..de124afac0 100644
    a b DTC::EncoderList* Dvr::GetEncoderList() 
    680680
    681681    QReadLocker tvlocker(&TVRec::s_inputsLock);
    682682    QList<InputInfo> inputInfoList = CardUtil::GetAllInputInfo();
    683     foreach (auto elink, tvList)
     683    for (auto * elink : qAsConst(tvList))
    684684    {
    685685        if (elink != nullptr)
    686686        {