Changeset: b8de6bba1a0f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b8de6bba1a0f
Modified Files:
gdk/gdk_atoms.c
monetdb5/mal/mal_interpreter.c
sql/backends/monet5/UDF/udf/udf.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_scenario.c
Branch: resource_management
Log Message:
WIP fix memory leaks
diffs (157 lines):
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1439,12 +1439,14 @@ BLOBread(void *A, size_t *dstlen, stream
if (mnstr_readInt(s, &len) != 1 || len < 0)
return NULL;
if (a == NULL || *dstlen < (size_t) len) {
- if ((a = GDKrealloc(a, (size_t) len)) == NULL)
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
+ if ((a = ma_realloc(ma, a, (size_t) len, *dstlen)) == NULL)
return NULL;
*dstlen = (size_t) len;
}
if (mnstr_read(s, (char *) a, (size_t) len, 1) != 1) {
- GDKfree(a);
+ //GDKfree(a);
return NULL;
}
return a;
@@ -1508,8 +1510,10 @@ BLOBtostr(str *tostr, size_t *l, const v
else
expectedlen = p->nitems * 2 + 1;
if (*l < expectedlen || *tostr == NULL) {
- GDKfree(*tostr);
- *tostr = GDKmalloc(expectedlen);
+ //GDKfree(*tostr);
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
+ *tostr = ma_alloc(ma, expectedlen);
if (*tostr == NULL)
return -1;
*l = expectedlen;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -341,11 +341,11 @@ runMAL(Client cntxt, MalBlkPtr mb, MalBl
throw(MAL, "mal.interpreter", "misalignment of
symbols");
if (mb->vtop > stk->stksize)
throw(MAL, "mal.interpreter", "stack too small");
- initStack(cntxt->alloc, env->stkbot, res);
+ initStack(mb->ma, env->stkbot, res);
if (!res)
throw(MAL, "mal.interpreter", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
} else {
- stk = prepareMALstack(cntxt->alloc, mb, mb->vsize);
+ stk = prepareMALstack(mb->ma, mb, mb->vsize);
if (stk == 0)
throw(MAL, "mal.interpreter", MAL_STACK_FAIL);
stk->blk = mb;
@@ -689,9 +689,7 @@ runMALsequence(allocator *tmp_alloc, Cli
assert(lhs->bat == isaBatType(getArgType(mb,
pci, k)));
rhs = &stk->stk[pci->argv[i]];
assert(rhs->bat == isaBatType(getArgType(mb,
pci, i)));
- // Note: We use cntxt->alloc here
- // some variables need to outlive tmp_alloc
- if (VALcopy(cntxt->alloc, lhs, rhs) == NULL) {
+ if (VALcopy(mb->ma, lhs, rhs) == NULL) {
ret = createException(MAL,
"mal.interpreter",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
break;
diff --git a/sql/backends/monet5/UDF/udf/udf.c
b/sql/backends/monet5/UDF/udf/udf.c
--- a/sql/backends/monet5/UDF/udf/udf.c
+++ b/sql/backends/monet5/UDF/udf/udf.c
@@ -86,15 +86,15 @@ UDFreverse(Client ctx, str *res, const s
assert(res && arg);
s = *arg;
if (strNil(s)) {
- if (!(*res = GDKstrdup(str_nil)))
+ if (!(*res = SA_STRDUP(ctx->alloc, str_nil)))
throw(MAL, "udf.reverse", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
} else {
size_t buflen = strlen(s) + 1;
- if (!(*res = GDKmalloc(buflen)))
+ if (!(*res = sa_alloc(ctx->alloc, buflen)))
throw(MAL, "udf.reverse", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
if ((msg = UDFreverse_(res, &buflen, s)) != MAL_SUCCEED) {
- GDKfree(*res);
+ //GDKfree(*res);
*res = NULL;
return msg;
}
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4076,7 +4076,7 @@ SQLargRecord(Client cntxt, MalBlkPtr mb,
t = strchr(s, ' ');
if( ! t)
t = strchr(s, '\t');
- *ret = GDKstrdup(t ? t + 1 : s);
+ *ret = SA_STRDUP(mb->ma, t ? t + 1 : s);
// GDKfree(s);
if(*ret == NULL)
throw(SQL, "sql.argRecord", SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -5392,10 +5392,10 @@ SQLstr_auto_vacuum(Client cntxt, MalBlkP
if (c && c->storage_type)
throw(SQL, "sql.str_auto_vacuum", SQLSTATE(42000) "Cannot
vacuum compressed column");
- if (!(sname_copy = GDKstrdup(sname)) || !(tname_copy =
GDKstrdup(tname)) || (cname && !(cname_copy = GDKstrdup(cname)))) {
- GDKfree(sname_copy);
- GDKfree(tname_copy);
- GDKfree(cname_copy);
+ if (!(sname_copy = SA_STRDUP(mb->ma, sname)) || !(tname_copy =
SA_STRDUP(mb->ma, tname)) || (cname && !(cname_copy = SA_STRDUP(mb->ma,
cname)))) {
+ //GDKfree(sname_copy);
+ //GDKfree(tname_copy);
+ //GDKfree(cname_copy);
throw(SQL, "sql.str_auto_vacuum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
void *argv[4] = {m->store, sname_copy, tname_copy, cname_copy};
@@ -5550,9 +5550,9 @@ SQLcheck(Client cntxt, MalBlkPtr mb, Mal
if (!exp)
throw(SQL, "SQLcheck", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
if (exp->comment)
- *r = GDKstrdup(exp->comment);
+ *r = SA_STRDUP(mb->ma, exp->comment);
else
- *r = GDKstrdup(exp2sql(m, exp));
+ *r = SA_STRDUP(mb->ma, exp2sql(m, exp));
if (*r == NULL)
throw(SQL, "SQLcheck", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
m->sp = sp;
@@ -5560,7 +5560,7 @@ SQLcheck(Client cntxt, MalBlkPtr mb, Mal
}
m->sp = sp;
}
- if (!(*r = GDKstrdup(str_nil)))
+ if (!(*r = SA_STRDUP(mb->ma, str_nil)))
throw(SQL, "SQLcheck", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -5607,7 +5607,7 @@ SQLread_dump_rel(Client cntxt, MalBlkPtr
if (res == NULL)
goto bailout;
- if (!(*r = GDKstrdup(res)))
+ if (!(*r = SA_STRDUP(mb->ma, res)))
goto bailout;
free(res);
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1632,11 +1632,12 @@ SQLparser_body(Client c, backend *be)
msg = createException(PARSE,
"SQLparser", SQLSTATE(45000) "Export operation failed: %s",
mvc_export_error(be, c->fdout, res));
err = 1;
}
+ int qc_id = be->q->id;
if (err) {
be->q->name = NULL; /* later remove
cleanup from mal from qc code */
qc_delete(m->qc, be->q);
}
- be->result_id = be->q->id;
+ be->result_id = qc_id;
be->q = NULL;
}
if (err)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]