Ticket #11194: 11194-v2.patch

File 11194-v2.patch, 4.2 KB (added by danielk, 11 years ago)

updated

  • mythtv/libs/libmythtv/AirPlay/mythairplayserver.cpp

    diff --git a/mythtv/libs/libmythtv/AirPlay/mythairplayserver.cpp b/mythtv/libs/libmythtv/AirPlay/mythairplayserver.cpp
    index 367a2a9..56eab48 100644
    a b  
    2222#include "bonjourregister.h"
    2323#include "mythairplayserver.h"
    2424
    25 MythAirplayServer* MythAirplayServer::gMythAirplayServer = NULL;
    26 MThread*           MythAirplayServer::gMythAirplayServerThread = NULL;
    27 QMutex*            MythAirplayServer::gMythAirplayServerMutex = new QMutex(QMutex::Recursive);
     25static MythAirplayServer* s_airplayServer = NULL;
     26static MThread*           s_airplayServerThread = NULL;
     27static QMutex             s_airplayServerMutex;
    2828
    2929#define LOC QString("AirPlay: ")
    3030
    class APHTTPRequest 
    307307
    308308bool MythAirplayServer::Create(void)
    309309{
    310     QMutexLocker locker(gMythAirplayServerMutex);
     310    QMutexLocker locker(&s_airplayServerMutex);
    311311
    312     // create the server thread
    313     if (!gMythAirplayServerThread)
    314         gMythAirplayServerThread = new MThread("AirplayServer");
    315     if (!gMythAirplayServerThread)
    316     {
    317         LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to create airplay thread.");
    318         return false;
    319     }
     312    // server already exits
     313    if (s_airplayServerThread)
     314        return true;
    320315
    321     // create the server object
    322     if (!gMythAirplayServer)
    323         gMythAirplayServer = new MythAirplayServer();
    324     if (!gMythAirplayServer)
    325     {
    326         LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to create airplay object.");
    327         return false;
    328     }
     316    // create the server thread & server object
     317    s_airplayServerThread = new MThread("AirplayServer");
     318    s_airplayServer = new MythAirplayServer();
    329319
    330320    // start the thread
    331     if (!gMythAirplayServerThread->isRunning())
    332     {
    333         gMythAirplayServer->moveToThread(gMythAirplayServerThread->qthread());
    334         QObject::connect(
    335             gMythAirplayServerThread->qthread(), SIGNAL(started()),
    336             gMythAirplayServer,                  SLOT(Start()));
    337         gMythAirplayServerThread->start(QThread::LowestPriority);
    338     }
     321    s_airplayServer->moveToThread(s_airplayServerThread->qthread());
     322    QObject::connect(
     323        s_airplayServerThread->qthread(), SIGNAL(started()),
     324        s_airplayServer,                  SLOT(Start()));
     325    s_airplayServerThread->start(QThread::LowestPriority);
    339326
    340327    LOG(VB_GENERAL, LOG_INFO, LOC + "Created airplay objects.");
    341328    return true;
    void MythAirplayServer::Cleanup(void) 
    345332{
    346333    LOG(VB_GENERAL, LOG_INFO, LOC + "Cleaning up.");
    347334
    348     if (gMythAirplayServer)
    349         gMythAirplayServer->Teardown();
     335    QMutexLocker locker(&s_airplayServerMutex);
    350336
    351     QMutexLocker locker(gMythAirplayServerMutex);
    352     if (gMythAirplayServerThread)
     337    if (s_airplayServer)
     338        s_airplayServer->Teardown();
     339
     340    if (s_airplayServerThread)
    353341    {
    354         gMythAirplayServerThread->exit();
    355         gMythAirplayServerThread->wait();
     342        s_airplayServerThread->exit();
     343        s_airplayServerThread->wait();
    356344    }
    357     delete gMythAirplayServerThread;
    358     gMythAirplayServerThread = NULL;
    359345
    360     delete gMythAirplayServer;
    361     gMythAirplayServer = NULL;
     346    delete s_airplayServer;
     347    s_airplayServer = NULL;
     348
     349    delete s_airplayServerThread;
     350    s_airplayServerThread = NULL;
    362351}
    363352
    364353
  • mythtv/libs/libmythtv/AirPlay/mythairplayserver.h

    diff --git a/mythtv/libs/libmythtv/AirPlay/mythairplayserver.h b/mythtv/libs/libmythtv/AirPlay/mythairplayserver.h
    index 2005b09..24b9c76 100644
    a b class MTV_PUBLIC MythAirplayServer : public ServerPool 
    5959  public:
    6060    static bool Create(void);
    6161    static void Cleanup(void);
    62     static MythAirplayServer *AirplaySharedInstance(void)
    63     { return gMythAirplayServer; }
    6462
    6563    MythAirplayServer();
    6664
    class MTV_PUBLIC MythAirplayServer : public ServerPool 
    9492    void PausePlayback(void);
    9593    void UnpausePlayback(void);
    9694
    97     // Globals
    98     static MythAirplayServer *gMythAirplayServer;
    99     static QMutex            *gMythAirplayServerMutex;
    100     static MThread           *gMythAirplayServerThread;
    101 
    10295    // Members
    10396    QString          m_name;
    10497    BonjourRegister *m_bonjour;