Ticket #8526: mainserver_slave_disconnect_deadlock.patch

File mainserver_slave_disconnect_deadlock.patch, 1.7 KB (added by doug@…, 10 years ago)

Proposed patch

  • programs/mythbackend/mainserver.cpp

     
    51325132        }
    51335133        else if (sock == socket)
    51345134        {
     5135            list<uint> disconnectedSlaves;
     5136            bool needsReschedule = false;
     5137   
    51355138            if (ismaster && pbs->isSlaveBackend())
    51365139            {
    51375140                VERBOSE(VB_IMPORTANT,QString("Slave backend: %1 no longer connected")
     
    51485151                            isFallingAsleep = false;
    51495152
    51505153                        elink->SetSocket(NULL);
    5151                         if (m_sched)
    5152                             m_sched->SlaveDisconnected(elink->GetCardID());
     5154                        if (m_sched) disconnectedSlaves.push_back(elink->GetCardID());
    51535155                    }
    51545156                }
    51555157                if (m_sched && !isFallingAsleep)
    5156                     m_sched->Reschedule(0);
     5158                    needsReschedule = true;
    51575159
    51585160                QString message = QString("LOCAL_SLAVE_BACKEND_OFFLINE %1")
    51595161                                          .arg(pbs->getHostname());
     
    52075209                VERBOSE(VB_IMPORTANT, "Playback sock still exists?");
    52085210
    52095211            sockListLock.unlock();
     5212            for (list<uint>::iterator p = disconnectedSlaves.begin() ;
     5213                p != disconnectedSlaves.end() ; p++) {
     5214              if (m_sched) m_sched->SlaveDisconnected(*p);
     5215            }
    52105216
     5217            if (m_sched && needsReschedule)
     5218                m_sched->Reschedule(0);
     5219
    52115220            pbs->DownRef();
    52125221            return;
    52135222        }