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

Reply via email to