Changeset: 13a97f873290 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13a97f873290
Modified Files:
monetdb5/mal/mal_instruction.c
Branch: default
Log Message:
Free some memory.
diffs (50 lines):
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -263,6 +263,9 @@ copyMalBlk(MalBlkPtr old)
for (i = 0; i < old->vtop; i++) {
mb->var[i]= old->var[i];
if (!VALcopy(&(mb->var[i].value), &(old->var[i].value))) {
+ while (--i >= 0)
+ VALclear(&mb->var[i].value);
+ GDKfree(mb->var);
GDKfree(mb);
GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
return NULL;
@@ -272,7 +275,9 @@ copyMalBlk(MalBlkPtr old)
mb->stmt = (InstrPtr *) GDKzalloc(sizeof(InstrPtr) * old->ssize);
if (mb->stmt == NULL) {
- GDKfree(mb->var); // this leaks strings in var
+ for (i = 0; i < old->vtop; i++)
+ VALclear(&mb->var[i].value);
+ GDKfree(mb->var);
GDKfree(mb);
GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
return NULL;
@@ -284,6 +289,12 @@ copyMalBlk(MalBlkPtr old)
for (i = 0; i < old->stop; i++) {
mb->stmt[i] = copyInstruction(old->stmt[i]);
if(!mb->stmt[i]) {
+ while (--i >= 0)
+ freeInstruction(mb->stmt[i]);
+ for (i = 0; i < old->vtop; i++)
+ VALclear(&mb->var[i].value);
+ GDKfree(mb->var);
+ GDKfree(mb->stmt);
GDKfree(mb);
GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
return NULL;
@@ -291,6 +302,12 @@ copyMalBlk(MalBlkPtr old)
}
mb->help = old->help ? GDKstrdup(old->help) : NULL;
if (old->help && !mb->help) {
+ for (i = 0; i < old->stop; i++)
+ freeInstruction(mb->stmt[i]);
+ for (i = 0; i < old->vtop; i++)
+ VALclear(&mb->var[i].value);
+ GDKfree(mb->var);
+ GDKfree(mb->stmt);
GDKfree(mb);
GDKerror("copyMalBlk:" MAL_MALLOC_FAIL);
return NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list