ecere/com/containers; samples/gui/OpenRider: Fixed memory leaks
authorJerome St-Louis <jerome@ecere.com>
Thu, 7 Aug 2014 08:16:53 +0000 (04:16 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 7 Aug 2014 08:27:10 +0000 (04:27 -0400)
- structs were leaking on deserialization

compiler/bootstrap/ecere/bootstrap/Container.c
ecere/src/com/containers/Container.ec
samples/guiAndGfx/openrider/game.ec

index ef2fafd..6b9da01 100644 (file)
@@ -935,7 +935,7 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(container, data);
 }
 if(isStruct)
-(((void (* )(void *  _class, void *  data))class->templateArgs[2].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(class->templateArgs[2].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(data)))), data = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete((void *)(uintptr_t)data), data = 0);
 (*this) = container;
 }
 
index a0fd5a1..7982b15 100644 (file)
@@ -294,7 +294,7 @@ public:
          container.Add(data);
       }
       if(isStruct)
-         delete data;
+         delete (void *)data;
       this = container;
    }
 }
index 8280117..7102784 100644 (file)
@@ -268,8 +268,9 @@ public:
 
    ~Game() { FreeAll(); }
    void FreeAll(void) {
-      for (i:vehicles)
-         delete i;
+      vehicles.Free();
+      delete vehicles;
+      delete lines;
       //we don't need to worry about the other things because they are automatically freed
    }
 
@@ -299,8 +300,7 @@ public:
       version_code = max_version_code_supported;
    }
    void ResetBall(void) {
-      for (i:vehicles)
-         delete i;
+      vehicles.Free();
       vehicles.size = 1;
 
       vehicles[0] = GameBall {