Ticket #11194: 11194-v1.patch

File 11194-v1.patch, 4.3 KB (added by danielk, 11 years ago)

Possible fix

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

    diff --git a/mythtv/libs/libmythtv/AirPlay/mythairplayserver.cpp b/mythtv/libs/libmythtv/AirPlay/mythairplayserver.cpp
    index 367a2a9..a8f3c19 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
    312312    // create the server thread
    313     if (!gMythAirplayServerThread)
    314         gMythAirplayServerThread = new MThread("AirplayServer");
    315     if (!gMythAirplayServerThread)
     313    if (!s_airplayServerThread)
     314        s_airplayServerThread = new MThread("AirplayServer");
     315    if (!s_airplayServerThread)
    316316    {
    317317        LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to create airplay thread.");
    318318        return false;
    319319    }
    320320
    321321    // create the server object
    322     if (!gMythAirplayServer)
    323         gMythAirplayServer = new MythAirplayServer();
    324     if (!gMythAirplayServer)
     322    if (!s_airplayServer)
     323        s_airplayServer = new MythAirplayServer();
     324    if (!s_airplayServer)
    325325    {
    326326        LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to create airplay object.");
     327        delete s_airplayServerThread;
     328        s_airplayServerThread = NULL;
    327329        return false;
    328330    }
    329331
    330332    // start the thread
    331     if (!gMythAirplayServerThread->isRunning())
     333    if (!s_airplayServerThread->isRunning())
    332334    {
    333         gMythAirplayServer->moveToThread(gMythAirplayServerThread->qthread());
     335        s_airplayServer->moveToThread(s_airplayServerThread->qthread());
    334336        QObject::connect(
    335             gMythAirplayServerThread->qthread(), SIGNAL(started()),
    336             gMythAirplayServer,                  SLOT(Start()));
    337         gMythAirplayServerThread->start(QThread::LowestPriority);
     337            s_airplayServerThread->qthread(), SIGNAL(started()),
     338            s_airplayServer,                  SLOT(Start()));
     339        s_airplayServerThread->start(QThread::LowestPriority);
    338340    }
    339341
    340342    LOG(VB_GENERAL, LOG_INFO, LOC + "Created airplay objects.");
    void MythAirplayServer::Cleanup(void) 
    345347{
    346348    LOG(VB_GENERAL, LOG_INFO, LOC + "Cleaning up.");
    347349
    348     if (gMythAirplayServer)
    349         gMythAirplayServer->Teardown();
     350    QMutexLocker locker(&s_airplayServerMutex);
    350351
    351     QMutexLocker locker(gMythAirplayServerMutex);
    352     if (gMythAirplayServerThread)
     352    if (s_airplayServer)
     353        s_airplayServer->Teardown();
     354
     355    if (s_airplayServerThread)
    353356    {
    354         gMythAirplayServerThread->exit();
    355         gMythAirplayServerThread->wait();
     357        s_airplayServerThread->exit();
     358        s_airplayServerThread->wait();
    356359    }
    357     delete gMythAirplayServerThread;
    358     gMythAirplayServerThread = NULL;
    359360
    360     delete gMythAirplayServer;
    361     gMythAirplayServer = NULL;
     361    delete s_airplayServer;
     362    s_airplayServer = NULL;
     363
     364    delete s_airplayServerThread;
     365    s_airplayServerThread = NULL;
    362366}
    363367
    364368
  • 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;