]> git.sesse.net Git - vlc/commitdiff
* var_manager.cpp: explicit object destruction order to avoid access
authorCyril Deguet <asmax@videolan.org>
Tue, 2 Aug 2005 23:26:22 +0000 (23:26 +0000)
committerCyril Deguet <asmax@videolan.org>
Tue, 2 Aug 2005 23:26:22 +0000 (23:26 +0000)
to an already destroyed map ! (and a crash with MSVC runtime...)

modules/gui/skins2/src/var_manager.cpp
modules/gui/skins2/src/var_manager.hpp

index 5db6700f35e2d0853c7cb0a707739e77cda1f324..cd2abc435b3ab0eb0a5bf7426d7043c12ac8a5d7 100644 (file)
 
 
 VarManager::VarManager( intf_thread_t *pIntf ): SkinObject( pIntf ),
-    m_tooltipText( pIntf ), m_helpText( pIntf, false )
+    m_pTooltipText( NULL ), m_pHelpText( NULL )
 {
+    m_pTooltipText = new VarText( pIntf );
+    m_pHelpText = new VarText( pIntf, false );
 }
 
 
@@ -45,6 +47,12 @@ VarManager::~VarManager()
     {
         m_anonVarList.pop_back();
     }
+
+    delete m_pTooltipText;
+
+    // Warning! the help text must be the last variable to be deleted,
+    // because VarText destructor references it (FIXME: find a cleaner way?)
+    delete m_pHelpText;
 }
 
 
index 11856c271273e923286c725ebd8ca8fd7bec3698..5e55b2613370acfe5b737ce4698c910c71ebd68d 100644 (file)
@@ -52,16 +52,16 @@ class VarManager: public SkinObject
         Variable *getVar( const string &rName, const string &rType );
 
         /// Get the tooltip text variable
-        VarText &getTooltipText() { return m_tooltipText; }
+        VarText &getTooltipText() { return *m_pTooltipText; }
 
         /// Get the help text variable
-        VarText &getHelpText() { return m_helpText; }
+        VarText &getHelpText() { return *m_pHelpText; }
 
     private:
         /// Tooltip text
-        VarText m_tooltipText;
+        VarText *m_pTooltipText;
         /// Help text
-        VarText m_helpText;
+        VarText *m_pHelpText;
         /// Map of named registered variables
         map<string, VariablePtr> m_varMap;
         /// List of named registed variables