]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/PropertyBasedMgr.cxx
Canvas: clear elements in shutdown()
[simgear.git] / simgear / props / PropertyBasedMgr.cxx
index 46f3c736d0bad49a08f81d623eb6f8710cedb8cf..4091da9fa715c60b57681c218122e8981b183813 100644 (file)
@@ -37,6 +37,7 @@ namespace simgear
   void PropertyBasedMgr::shutdown()
   {
     _props->removeChangeListener(this);
+    _elements.clear();
   }
 
   //----------------------------------------------------------------------------
@@ -126,6 +127,7 @@ namespace simgear
       _elements.resize(index + 1);
     }
     else if( _elements[index] )
+    {
       SG_LOG
       (
         SG_GENERAL,
@@ -133,6 +135,10 @@ namespace simgear
         _name_elements << "[" << index << "] already exists!"
       );
 
+      // Give anything holding a reference to this element to release it
+      _elements[index]->onDestroy();
+    }
+
     PropertyBasedElementPtr el = _element_factory(child);
     el->setSelf( el );
     _elements[index] = el;
@@ -158,8 +164,11 @@ namespace simgear
         "can't removed unknown " << _name_elements << "[" << index << "]!"
       );
     else
+    {
       // remove the element...
+      _elements[index]->onDestroy();
       _elements[index].reset();
+    }
   }
 
 } // namespace simgear