From: Erwan Tulou Date: Mon, 22 Feb 2010 16:03:44 +0000 (+0100) Subject: skins2: work around a deallocation problem X-Git-Tag: 1.1.0-pre1~749 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e95b99e6466cf4a9d1c9c27bc980b0dc11c5092f;p=vlc skins2: work around a deallocation problem 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. --- diff --git a/modules/gui/skins2/utils/var_text.cpp b/modules/gui/skins2/utils/var_text.cpp index e692433d5e..4ca805fd87 100644 --- a/modules/gui/skins2/utils/var_text.cpp +++ b/modules/gui/skins2/utils/var_text.cpp @@ -219,14 +219,21 @@ void VarText::onUpdate( Subject &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 ); }