Ticket #9885: slavedisconnect.patch

File slavedisconnect.patch, 3.7 KB (added by Jonatan <mythtv@…>, 14 years ago)
  • mythtv/programs/mythbackend/mainserver.cpp

    diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp
    index 1273b98..f54c22e 100644
    a b void MainServer::customEvent(QEvent *e)  
    10101010        if (me->Message() == "LOCAL_RECONNECT_TO_MASTER")
    10111011            masterServerReconnect->start(kMasterServerReconnectTimeout);
    10121012
     1013        if (me->Message() == "LOCAL_SLAVE_BACKEND_ENCODERS_OFFLINE")
     1014            HandleSlaveDisconnectedEvent(*me);
     1015
    10131016        if (me->Message().left(6) == "LOCAL_")
    10141017            return;
    10151018
    void MainServer::connectionClosed(MythSocket *socket)  
    54645467        }
    54655468        else if (sock == socket)
    54665469        {
    5467             list<uint> disconnectedSlaves;
     5470            list<uint> offlineEncoderIDs;
    54685471            bool needsReschedule = false;
    54695472
    54705473            if (ismaster && pbs->isSlaveBackend())
    void MainServer::connectionClosed(MythSocket *socket)  
    54835486                            isFallingAsleep = false;
    54845487
    54855488                        elink->SetSocket(NULL);
    5486                         if (m_sched) disconnectedSlaves.push_back(elink->GetCardID());
     5489                        if (m_sched) offlineEncoderIDs.push_back(elink->GetCardID());
    54875490                    }
    54885491                }
    54895492                if (m_sched && !isFallingAsleep)
    void MainServer::connectionClosed(MythSocket *socket)  
    55415544                VERBOSE(VB_IMPORTANT, "Playback sock still exists?");
    55425545
    55435546            sockListLock.unlock();
    5544             for (list<uint>::iterator p = disconnectedSlaves.begin() ;
    5545                 p != disconnectedSlaves.end() ; p++) {
    5546               if (m_sched) m_sched->SlaveDisconnected(*p);
    5547             }
    5548 
    5549             if (m_sched && needsReschedule)
    5550                 m_sched->Reschedule(0);
     5547            SendSlaveDisconnectedEvent(offlineEncoderIDs, needsReschedule);
    55515548
    55525549            pbs->DownRef();
    55535550            return;
    void MainServer::ShutSlaveBackendsDown(QString &haltcmd)  
    59665963    sockListLock.unlock();
    59675964}
    59685965
     5966void MainServer::HandleSlaveDisconnectedEvent(const MythEvent& event)
     5967{
     5968    if (event.ExtraDataCount() > 0 && m_sched)
     5969    {
     5970        bool needsReschedule = event.ExtraData(0).toUInt();
     5971        for (int i = 1; i < event.ExtraDataCount(); i++)
     5972            m_sched->SlaveDisconnected(event.ExtraData(i).toUInt());
     5973
     5974        if (needsReschedule)
     5975            m_sched->Reschedule(0);
     5976    }
     5977}
     5978
     5979void MainServer::SendSlaveDisconnectedEvent(const list<uint>& offlineEncoderIDs, bool needsReschedule)
     5980{
     5981    QStringList reschedAndOfflineEncoderIDs;
     5982    reschedAndOfflineEncoderIDs << QString::number(static_cast<uint>(needsReschedule));
     5983
     5984    list<uint>::const_iterator it;
     5985    for (it = offlineEncoderIDs.begin(); it != offlineEncoderIDs.end(); ++it)
     5986    {
     5987        reschedAndOfflineEncoderIDs << QString::number(*it);
     5988    }
     5989
     5990    MythEvent me("LOCAL_SLAVE_BACKEND_ENCODERS_OFFLINE", reschedAndOfflineEncoderIDs);
     5991    gCoreContext->dispatch(me);
     5992}
     5993
    59695994/* vim: set expandtab tabstop=4 shiftwidth=4: */
  • mythtv/programs/mythbackend/mainserver.h

    diff --git a/mythtv/programs/mythbackend/mainserver.h b/mythtv/programs/mythbackend/mainserver.h
    index 66e9c5b..eb145e3 100644
    a b class MainServer : public QObject, public MythSocketCBs  
    212212    void HandleQueryTimeZone(PlaybackSock *pbs);
    213213    void HandleBlockShutdown(bool blockShutdown, PlaybackSock *pbs);
    214214    void HandleDownloadFile(const QStringList &command, PlaybackSock *pbs);
     215    void HandleSlaveDisconnectedEvent(const MythEvent& event);
     216    void SendSlaveDisconnectedEvent(const list<uint>& offlineEncoderIDs, bool needsReschedule);
    215217
    216218    void SendResponse(MythSocket *pbs, QStringList &commands);
    217219