[adsp] fix crash and frezzes during add-on load
authorAlwin Esch <alwin.esch@web.de>
Tue, 20 Oct 2015 18:28:16 +0000 (20:28 +0200)
committerAlwin Esch <alwin.esch@web.de>
Sat, 28 Nov 2015 12:01:50 +0000 (13:01 +0100)
xbmc/cores/AudioEngine/DSPAddons/ActiveAEDSP.cpp

index 70d17bf..bafb548 100644 (file)
@@ -110,11 +110,11 @@ void CActiveAEDSP::Activate(bool bAsync /* = false */)
     return;
   }
 
-  CSingleLock lock(m_critSection);
-
   /* first stop and remove any audio dsp add-on's */
   Deactivate();
 
+  CSingleLock lock(m_critSection);
+
   CLog::Log(LOGNOTICE, "ActiveAE DSP - starting");
 
   /* don't start if Settings->System->Audio->Audio DSP isn't checked */
@@ -178,29 +178,29 @@ void CActiveAEDSP::TriggerModeUpdate(bool bAsync /* = true */)
 
 void CActiveAEDSP::Deactivate(void)
 {
-  CSingleLock lock(m_critSection);
-
   /* check whether the audio dsp is loaded */
   if (!m_isActive)
     return;
 
-  CLog::Log(LOGNOTICE, "ActiveAE DSP - stopping");
-
   /* stop thread */
-  StopThread(false);
+  StopThread();
 
-  /* unload all data */
-  Cleanup();
+  CSingleLock lock(m_critSection);
 
-  /* close database */
-  if (m_databaseDSP.IsOpen())
-    m_databaseDSP.Close();
+  CLog::Log(LOGNOTICE, "ActiveAE DSP - stopping");
 
   /* destroy all addons */
   for (AE_DSP_ADDONMAP_ITR itr = m_addonMap.begin(); itr != m_addonMap.end(); ++itr)
     itr->second->Destroy();
 
   m_addonMap.clear();
+
+  /* unload all data */
+  Cleanup();
+
+  /* close database */
+  if (m_databaseDSP.IsOpen())
+    m_databaseDSP.Close();
 }
 
 void CActiveAEDSP::Cleanup(void)
@@ -776,8 +776,10 @@ void CActiveAEDSP::Process(void)
       else if (!m_noAddonWarningDisplayed)
         ShowDialogNoAddonsEnabled();
     }
-
-    Sleep(1000);
+    else
+    {
+      Sleep(1000);
+    }
   }
 
   m_isActive = false;