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