Changeset: d02dd07b9529 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d02dd07b9529 Modified Files: tools/monetdbe/monetdbe.c Branch: Oct2020 Log Message:
Don't leak on error diffs (69 lines): diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -1115,13 +1115,12 @@ monetdbe_append(monetdbe_database dbhdl, if ((mdbe->msg = validate_database_handle(mdbe, "monetdbe.monetdbe_append")) != MAL_SUCCEED) { - return mdbe->msg; } if ((mdbe->msg = getSQLContext(mdbe->c, NULL, &m, NULL)) != MAL_SUCCEED) goto cleanup; - if ((mdbe->msg = SQLtrans(m)) != MAL_SUCCEED) + if ((mdbe->msg = SQLtrans(m)) != MAL_SUCCEED) goto cleanup; if (schema == NULL) { @@ -1185,7 +1184,6 @@ monetdbe_append(monetdbe_database dbhdl, BAT *bn = NULL; if ((bn = COLnew(0, mtype, 0, TRANSIENT)) == NULL) { - BBPreclaim(bn); mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot create append column"); goto cleanup; } @@ -1208,16 +1206,14 @@ monetdbe_append(monetdbe_database dbhdl, BATsettrivprop(bn); if (store_funcs.append_col(m->session->tr, c, bn, TYPE_bat) != 0) { + BBPreclaim(bn); mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append BAT"); goto cleanup; - } bn->theap.base = prev_base; bn->theap.size = prev_size; BBPreclaim(bn); - - } else if (mtype == TYPE_str) { char **d = (char**)v; @@ -1275,6 +1271,7 @@ monetdbe_append(monetdbe_database dbhdl, for (size_t j=0; j<cnt; j++){ blob* b = (blob*) nil; + int res; if (!blob_is_null(be[j])) { size_t len = be[j].size; b = (blob*) GDKmalloc(blobsize(len)); @@ -1285,12 +1282,13 @@ monetdbe_append(monetdbe_database dbhdl, memcpy(b->data, be[j].data, len); } - if (store_funcs.append_col(m->session->tr, c, b, mtype) != 0) { + res = store_funcs.append_col(m->session->tr, c, b, mtype); + if (b && b != (blob*)nil) + GDKfree(b); + if (res != 0) { mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); goto cleanup; } - if (b && b != (blob*)nil) - GDKfree(b); } } } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list