]> git.mxchange.org Git - simgear.git/commitdiff
Reset: clean event-manager shutdown
authorJames Turner <zakalawe@mac.com>
Tue, 12 Nov 2013 22:20:21 +0000 (22:20 +0000)
committerJames Turner <zakalawe@mac.com>
Tue, 12 Nov 2013 22:23:19 +0000 (22:23 +0000)
simgear/structure/event_mgr.cxx
simgear/structure/event_mgr.hxx

index 37ef4e13bdc18d5082d77e4a95e97b80d1a18d8a..c4518f124eea484e088d43be6685f05f5fd04a07 100644 (file)
@@ -54,6 +54,12 @@ void SGEventMgr::unbind()
     _rtProp.clear();
 }
 
+void SGEventMgr::shutdown()
+{
+    _simQueue.clear();
+    _rtQueue.clear();
+}
+
 void SGEventMgr::update(double delta_time_sec)
 {
     _simQueue.update(delta_time_sec);
@@ -97,7 +103,7 @@ SGTimerQueue::SGTimerQueue(int size)
 
     _table = new HeapEntry[_tableSize];
     for(int i=0; i<_tableSize; i++) {
-       _table[i].pri = 0;
+           _table[i].pri = 0;
         _table[i].timer = 0;
     }
 }
@@ -105,14 +111,24 @@ SGTimerQueue::SGTimerQueue(int size)
 
 SGTimerQueue::~SGTimerQueue()
 {
+    clear();
+    delete[] _table;
+}
+
+void SGTimerQueue::clear()
+{
+    // delete entries
     for(int i=0; i<_numEntries; i++) {
         delete _table[i].timer;
-        _table[i].timer = 0;
     }
+    
     _numEntries = 0;
-    delete[] _table;
-    _table = 0;
-    _tableSize = 0;
+    
+    // clear entire table to empty
+    for(int i=0; i<_tableSize; i++) {
+           _table[i].pri = 0;
+        _table[i].timer = 0;
+    }
 }
 
 void SGTimerQueue::update(double deltaSecs)
index 682964d27e98e251acf5d767068ba6974e4bb48a..06e28ea58b91bdbb65eb27a571a460e34e817ce9 100644 (file)
@@ -25,6 +25,7 @@ public:
     SGTimerQueue(int preSize=1);
     ~SGTimerQueue();
 
+    void clear();
     void update(double deltaSecs);
 
     double now() { return _now; }
@@ -74,6 +75,7 @@ public:
     virtual void init() {}
     virtual void update(double delta_time_sec);
     virtual void unbind();
+    virtual void shutdown();
     
     void setRealtimeProperty(SGPropertyNode* node) { _rtProp = node; }