Browse Source

Avoid memory leak on trecorddef.variantrecorddesc field

git-svn-id: trunk@34363 -
pierre 9 years ago
parent
commit
dfeb6e3ae1
1 changed files with 20 additions and 0 deletions
  1. 20 0
      compiler/symdef.pas

+ 20 - 0
compiler/symdef.pas

@@ -4450,7 +4450,27 @@ implementation
 
 
 
 
     destructor trecorddef.destroy;
     destructor trecorddef.destroy;
+
+      procedure free_variantrecdesc(var variantrecdesc : pvariantrecdesc);
+        var
+          i : longint;
+        begin
+         while assigned(variantrecdesc) do
+           begin
+             for i:=0 to high(variantrecdesc^.branches) do
+               begin
+                 free_variantrecdesc(variantrecdesc^.branches[i].nestedvariant);
+                 SetLength(variantrecdesc^.branches[i].values,0);
+               end;
+             SetLength(variantrecdesc^.branches,0);
+             dispose(variantrecdesc);
+             variantrecdesc:=nil;
+           end;
+        end;
+
       begin
       begin
+         if assigned(variantrecdesc) then
+           free_variantrecdesc(variantrecdesc);
          if assigned(symtable) then
          if assigned(symtable) then
            begin
            begin
              symtable.free;
              symtable.free;