#define AIRPLAY_STATUS_NOT_IMPLEMENTED 501
#define AIRPLAY_STATUS_NO_RESPONSE_NEEDED 1000
+CCriticalSection CAirPlayServer::ServerInstanceLock;
CAirPlayServer *CAirPlayServer::ServerInstance = NULL;
int CAirPlayServer::m_isPlaying = 0;
void CAirPlayServer::Announce(AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data)
{
+ CSingleLock lock(ServerInstanceLock);
+
if ( (flag & Player) && strcmp(sender, "xbmc") == 0 && ServerInstance)
{
if (strcmp(message, "OnStop") == 0)
{
StopServer(true);
+ CSingleLock lock(ServerInstanceLock);
+
ServerInstance = new CAirPlayServer(port, nonlocal);
if (ServerInstance->Initialize())
{
bool CAirPlayServer::SetCredentials(bool usePassword, const CStdString& password)
{
+ CSingleLock lock(ServerInstanceLock);
bool ret = false;
if (ServerInstance)
void CAirPlayServer::StopServer(bool bWait)
{
+ CSingleLock lock(ServerInstanceLock);
if (ServerInstance)
{
ServerInstance->StopThread(bWait);
void CAirPlayServer::backupVolume()
{
- if (ServerInstance->m_origVolume == -1)
+ CSingleLock lock(ServerInstanceLock);
+
+ if (ServerInstance && ServerInstance->m_origVolume == -1)
ServerInstance->m_origVolume = (int)g_application.GetVolume();
}
void CAirPlayServer::restoreVolume()
{
- if (ServerInstance->m_origVolume != -1 && CSettings::Get().GetBool("services.airplayvolumecontrol"))
+ CSingleLock lock(ServerInstanceLock);
+
+ if (ServerInstance && ServerInstance->m_origVolume != -1 && CSettings::Get().GetBool("services.airplayvolumecontrol"))
{
g_application.SetVolume((float)ServerInstance->m_origVolume);
ServerInstance->m_origVolume = -1;