From: Jerome St-Louis Date: Sun, 15 Mar 2015 19:30:43 +0000 (-0400) Subject: ecere/com/Map;gui/TabControl; extras: Fixed memory leaks X-Git-Url: http://ecere.com/cgi-bin/gitweb.cgi?p=sdk;a=commitdiff_plain;h=bf8b5b18b8573b165cf5148fbd4c9d32ffaa5031 ecere/com/Map;gui/TabControl; extras: Fixed memory leaks - Keys of Maps from Delete() and Free() - TabControl when using AddTab - GuiConfigData strings --- diff --git a/ecere/src/com/containers/Map.ec b/ecere/src/com/containers/Map.ec index 13e1cdd..a510961 100644 --- a/ecere/src/com/containers/Map.ec +++ b/ecere/src/com/containers/Map.ec @@ -125,9 +125,8 @@ public class Map : CustomAVLTree, I = MT, D = } } - void Remove(MapNode node) + void FreeKey(MapNode node) { - CustomAVLTree::Remove(node); if(class(MT).type == structClass) { // TODO: Make this easier... @@ -136,6 +135,12 @@ public class Map : CustomAVLTree, I = MT, D = } else delete node.key; + } + + void Remove(MapNode node) + { + CustomAVLTree::Remove(node); + FreeKey(node); delete node; } @@ -161,6 +166,7 @@ public class Map : CustomAVLTree, I = MT, D = MapNode parent = node.parent; V value = GetData(node); delete value; + FreeKey(node); delete node; node = parent; @@ -174,6 +180,7 @@ public class Map : CustomAVLTree, I = MT, D = { V value = GetData(node); delete value; + FreeKey(node); Remove(node); } diff --git a/ecere/src/gui/controls/TabControl.ec b/ecere/src/gui/controls/TabControl.ec index e39553f..aa5dfa5 100644 --- a/ecere/src/gui/controls/TabControl.ec +++ b/ecere/src/gui/controls/TabControl.ec @@ -595,7 +595,9 @@ public class TabControl : Window if(created) { tab.button.Create(); - incref tab; + // This was causing leaks with RemoveTab / AddTab usage in Cartographer... + // RemoveTab() does not dec'ref... + // incref tab; } numTabs++; diff --git a/extras/gui/GuiConfigData.ec b/extras/gui/GuiConfigData.ec index 3c3b60a..3e22df4 100644 --- a/extras/gui/GuiConfigData.ec +++ b/extras/gui/GuiConfigData.ec @@ -121,6 +121,17 @@ private: ~GuiConfigData() { timer.Stop(); + + if(windows) + { + windows.Free(); + delete windows; + } + if(paneSplitters) + { + paneSplitters.Free(); + delete paneSplitters; + } } Timer timer