Changeset: 8af4715d2523 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8af4715d2523
Modified Files:
        monetdb5/optimizer/opt_bincopyfrom.c
        monetdb5/optimizer/opt_parappend.c
Branch: copybinary
Log Message:

Plug memory leak


diffs (70 lines):

diff --git a/monetdb5/optimizer/opt_bincopyfrom.c 
b/monetdb5/optimizer/opt_bincopyfrom.c
--- a/monetdb5/optimizer/opt_bincopyfrom.c
+++ b/monetdb5/optimizer/opt_bincopyfrom.c
@@ -42,13 +42,14 @@ OPTbincopyfromImplementation(Client cntx
                return MAL_SUCCEED;
 
        old_mb_stmt = mb->stmt;
-       int old_stop = mb->stop;
+       size_t old_ssize = mb->ssize;
+       size_t old_stop = mb->stop;
        if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) {
                msg = createException(MAL, "optimizer.bincopyfrom", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
                goto end;
        }
 
-       for (int i = 0; i < old_stop; i++) {
+       for (size_t i = 0; i < old_stop; i++) {
                InstrPtr p = old_mb_stmt[i];
                if (p->modname == sqlRef && p->fcnname == importTableRef) {
                        msg = transform(mb, p);
@@ -61,8 +62,12 @@ OPTbincopyfromImplementation(Client cntx
        }
 
 end:
-       if (old_mb_stmt)
+       if (old_mb_stmt) {
+               for (size_t i = old_stop; i < old_ssize; i++)
+                       if (old_mb_stmt[i])
+                               freeInstruction(old_mb_stmt[i]);
                GDKfree(old_mb_stmt);
+       }
 
     /* Defense line against incorrect plans */
     if (actions > 0 && msg == MAL_SUCCEED) {
diff --git a/monetdb5/optimizer/opt_parappend.c 
b/monetdb5/optimizer/opt_parappend.c
--- a/monetdb5/optimizer/opt_parappend.c
+++ b/monetdb5/optimizer/opt_parappend.c
@@ -51,13 +51,14 @@ OPTparappendImplementation(Client cntxt,
                return MAL_SUCCEED;
 
        old_mb_stmt = mb->stmt;
-       int old_stop = mb->stop;
+       size_t old_ssize = mb->ssize;
+       size_t old_stop = mb->stop;
        if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) {
                msg = createException(MAL, "optimizer.parappend", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
                goto end;
        }
 
-       for (int i = 0; i < old_stop; i++) {
+       for (size_t i = 0; i < old_stop; i++) {
                InstrPtr p = old_mb_stmt[i];
                if (p->modname == sqlRef && p->fcnname == appendRef && 
isaBatType(getArgType(mb, p, 5))) {
                        msg = transform(&state, cntxt, mb, p, &actions);
@@ -73,8 +74,14 @@ OPTparappendImplementation(Client cntxt,
        assert(state.prep_stmt == NULL);
 
 end:
-       if (old_mb_stmt)
+       if (old_mb_stmt) {
+               for (size_t i = old_stop; i < old_ssize; i++) {
+                       InstrPtr p = old_mb_stmt[i];
+                       if (p)
+                               freeInstruction(p);
+               }
                GDKfree(old_mb_stmt);
+       }
 
     /* Defense line against incorrect plans */
     if (actions > 0 && msg == MAL_SUCCEED) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to