]> git.mxchange.org Git - simgear.git/commitdiff
Catch dangling property ties.
authorThorstenB <brehmt@gmail.com>
Mon, 7 Mar 2011 18:32:20 +0000 (19:32 +0100)
committerThorstenB <brehmt@gmail.com>
Mon, 7 Mar 2011 18:32:20 +0000 (19:32 +0100)
It's bad when tied properties are not untied before removing the tied property list.
We could try to "untie" the properties in the destructor - but that usually
caused weird mem access errors, since the tied properties will access
a no longer existing object (the very object whose destruction called the
TiedPropertyList destructor...). => so just add a warning and a nagging trap :)

simgear/props/tiedpropertylist.hxx

index 28cdb5183b2ffd15ed188291d941c3516b464a8b..c825d1051e027890bcfd813c5f646da6f58c4d4f 100644 (file)
@@ -21,6 +21,7 @@
 #ifndef __TIEDPROPERTYLIST_HXX
 #define  __TIEDPROPERTYLIST_HXX
 #include <simgear/props/props.hxx>
+#include <assert.h>
 using simgear::PropertyList;
 
 namespace simgear {
@@ -34,6 +35,16 @@ class TiedPropertyList : PropertyList {
 public:
     TiedPropertyList() {}
     TiedPropertyList( SGPropertyNode_ptr root ) : _root(root) {}
+    virtual ~TiedPropertyList()
+    { 
+        _root = 0;
+        if (size()>0)
+        {
+            SG_LOG(SG_GENERAL, SG_ALERT, "Detected properties with dangling ties. Use 'Untie' before removing a TiedPropertyList.");
+            // running debug mode: go, fix it!
+            assert(size() == 0);
+        }
+    }
 
     void setRoot( SGPropertyNode_ptr root ) { _root = root; }
     SGPropertyNode_ptr getRoot() const { return _root; }