]> git.sesse.net Git - vlc/commitdiff
skins2: work around a deallocation problem
authorErwan Tulou <erwan10@videolan.org>
Mon, 22 Feb 2010 16:03:44 +0000 (17:03 +0100)
committerErwan Tulou <erwan10@videolan.org>
Mon, 22 Feb 2010 16:27:18 +0000 (17:27 +0100)
VlcManager and VarManager dependents on each other (a design problem)
Anyway, it is a bad idea to use instance() on any manager when deallocating ressources
as it can start anew a manager already deallocated.
Better use global variables in p_sys and act accordingly.

modules/gui/skins2/utils/var_text.cpp

index e692433d5e3d5ee1c6edab725520e00c666538ca..4ca805fd877662c8b3a823c0d61a11755a3e3700 100644 (file)
@@ -219,14 +219,21 @@ void VarText::onUpdate( Subject<VarText> &rVariable, void *arg )
 void VarText::delObservers()
 {
     // Stop observing other variables
-    VlcProc *pVlcProc = VlcProc::instance( getIntf() );
-    pVlcProc->getTimeVar().delObserver( this );
-    pVlcProc->getVolumeVar().delObserver( this );
-    pVlcProc->getStreamNameVar().delObserver( this );
-    pVlcProc->getStreamURIVar().delObserver( this );
-    pVlcProc->getStreamBitRateVar().delObserver( this );
-    pVlcProc->getStreamSampleRateVar().delObserver( this );
-    VarManager *pVarManager = VarManager::instance( getIntf() );
-    pVarManager->getHelpText().delObserver( this );
+
+    VlcProc *pVlcProc = getIntf()->p_sys->p_vlcProc;
+    VarManager *pVarManager = getIntf()->p_sys->p_varManager;
+
+    if( pVlcProc )
+    {
+        pVlcProc->getTimeVar().delObserver( this );
+        pVlcProc->getVolumeVar().delObserver( this );
+        pVlcProc->getStreamNameVar().delObserver( this );
+        pVlcProc->getStreamURIVar().delObserver( this );
+        pVlcProc->getStreamBitRateVar().delObserver( this );
+        pVlcProc->getStreamSampleRateVar().delObserver( this );
+    }
+
+    if( pVarManager )
+        pVarManager->getHelpText().delObserver( this );
 }