[vkgen] Plug a pile of ruamoko memory leaks

While the previous cleanup took care of the C side, it turns out vkgen
was leaking property list items all over the place, but they were
cleaned up by the shutdown code.
This commit is contained in:
Bill Currie 2023-03-12 18:30:21 +09:00
parent 7d4c1d79b1
commit 68b5cd89d2
4 changed files with 41 additions and 5 deletions

View file

@ -1,4 +1,5 @@
#include <PropertyList.h> #include <PropertyList.h>
#include <string.h>
#include "vkfieldarray.h" #include "vkfieldarray.h"
#include "vkfieldtype.h" #include "vkfieldtype.h"
@ -17,11 +18,19 @@
PLItem *desc = [item getObjectForKey:"type"]; PLItem *desc = [item getObjectForKey:"type"];
type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain]; type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain];
value_field = [[item getObjectForKey:"values"] string]; value_field = str_hold ([[item getObjectForKey:"values"] string]);
size_field = [[item getObjectForKey:"size"] string]; size_field = str_hold ([[item getObjectForKey:"size"] string]);
return self; return self;
} }
-(void) dealloc
{
[type release];
str_free (value_field);
str_free (size_field);
[super dealloc];
}
-writeParseData -writeParseData
{ {
fprintf (output_file, "static parse_array_t parse_%s_%s_data = {\n", fprintf (output_file, "static parse_array_t parse_%s_%s_data = {\n",

View file

@ -1,4 +1,5 @@
#include <PropertyList.h> #include <PropertyList.h>
#include <string.h>
#include "vkfieldreadonly.h" #include "vkfieldreadonly.h"
#include "vkfieldtype.h" #include "vkfieldtype.h"
@ -17,10 +18,17 @@
PLItem *desc = [item getObjectForKey:"type"]; PLItem *desc = [item getObjectForKey:"type"];
type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain]; type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain];
value_field = [[item getObjectForKey:"value"] string]; value_field = str_hold ([[item getObjectForKey:"value"] string]);
return self; return self;
} }
-(void) dealloc
{
[type release];
str_free (value_field);
[super dealloc];
}
-writeParseData -writeParseData
{ {
return self; return self;

View file

@ -1,4 +1,5 @@
#include <PropertyList.h> #include <PropertyList.h>
#include <string.h>
#include "vkfieldsingle.h" #include "vkfieldsingle.h"
#include "vkfieldtype.h" #include "vkfieldtype.h"
@ -17,10 +18,17 @@
PLItem *desc = [item getObjectForKey:"type"]; PLItem *desc = [item getObjectForKey:"type"];
type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain]; type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain];
value_field = [[item getObjectForKey:"value"] string]; value_field = str_hold ([[item getObjectForKey:"value"] string]);
return self; return self;
} }
-(void) dealloc
{
[type release];
str_free (value_field);
[super dealloc];
}
-writeParseData -writeParseData
{ {
fprintf (output_file, "static parse_single_t parse_%s_%s_data = {\n", fprintf (output_file, "static parse_single_t parse_%s_%s_data = {\n",

View file

@ -131,6 +131,12 @@ get_object_key (void *obj, void *unused)
return [(id)obj name]; return [(id)obj name];
} }
static void
free_object (void *obj, void *unused)
{
[(id)obj release];
}
void void
usage (string name) usage (string name)
{ {
@ -181,7 +187,7 @@ main(int argc, string *argv)
} }
queue = [[Array array] retain]; queue = [[Array array] retain];
output_types = [[Array array] retain]; output_types = [[Array array] retain];
available_types = Hash_NewTable (127, get_object_key, nil, nil); available_types = Hash_NewTable (127, get_object_key, free_object, nil);
processed_types = Hash_NewTable (127, get_string_key, nil, nil); processed_types = Hash_NewTable (127, get_string_key, nil, nil);
scan_types (); scan_types ();
@ -258,5 +264,10 @@ main(int argc, string *argv)
Qclose (header_file); Qclose (header_file);
Hash_DelTable (available_types); Hash_DelTable (available_types);
[plist release]; [plist release];
[search release];
[handles release];
[parse release];
[queue release];
[output_types release];
return 0; return 0;
} }