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]

Reply via email to