Changeset: f84d8b9e2602 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f84d8b9e2602
Modified Files:
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
Branch: Dec2011
Log Message:

fixed leaks some more leaks
        - statement leaks at end of client
        - sql allocator leak at catalog initialisation


diffs (191 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -1837,6 +1837,7 @@ SQLtransaction2(Client cntxt, MalBlkPtr 
 static str
 create_table_or_view( mvc *sql, char *sname, sql_table *t, int temp)
 {
+       sql_allocator *osa;
        sql_schema *s = mvc_bind_schema(sql, sname);
        sql_table *nt = NULL;
        node *n;
@@ -1854,6 +1855,8 @@ create_table_or_view( mvc *sql, char *sn
                return sql_message("42000!CREATE TABLE: insufficient privileges 
for user '%s' in schema '%s'", stack_get_string(sql, "current_user"), 
s->base.name);
        }
 
+       osa = sql->sa;
+       sql->sa = NULL;
        /* first check default values */
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
@@ -1896,12 +1899,14 @@ create_table_or_view( mvc *sql, char *sn
        /* also create dependencies */
        if (t->query && isView(t)) {
                sql_rel *r = NULL;
+
                sql->sa = sa_create();
                r = rel_parse(sql, t->query, m_deps); 
                rel_destroy(r);
                sa_destroy(sql->sa);
                sql->sa = NULL;
        }
+       sql->sa = osa;
        return MAL_SUCCEED;
 }
 
@@ -6701,6 +6706,7 @@ RAstatement(Client cntxt, MalBlkPtr mb, 
        str msg = getContext(cntxt, mb, &m, &b);
        sql_rel *rel;
 
+       assert(m->sa == NULL);
        m->sa = sa_create();
        rel = rel_read(m, *expr, &pos);
        if (rel) {
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -2339,9 +2339,12 @@ backend_create_func(backend *be, sql_fun
        sa = sa_create();
        m->session->schema = f->s;
        s = sql_parse(m, sa, f->query, m_instantiate);
+       m->sa = osa;
        m->session->schema = schema;
-       if (s && !f->sql) /* native function */
+       if (s && !f->sql) { /* native function */
+               sa_destroy(sa);
                return;
+       }
 
        if (!s) {
                fputs(m->errstr, stderr);
@@ -2417,6 +2420,7 @@ backend_create_func(backend *be, sql_fun
                varSetProp(curBlk, getArg(curInstr, 0), unsafeProp, op_eq, 
NULL);
        /* SQL function definitions meant for inlineing should not be optimized 
before */
        varSetProp(curBlk, getArg(curInstr, 0), sqlfunctionProp, op_eq, NULL);
+       f->sa = sa;
        m->sa = osa;
        addQueryToCache(c);
        if (backup)
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
@@ -526,6 +526,8 @@ SQLinitClient(Client c)
                sql_subtype clob; 
 
                sql_find_subtype(&clob, "clob", 0, 0);
+               if (!m->sa)
+                       m->sa = sa_create();
                if (!sql_bind_func3(m->sa, mvc_bind_schema(m,"sys"), "like", 
&clob, &clob, &clob, F_FILT )) {
                        char *err;
                        if ((err = sql_update_dec2011(c, m)) != NULL)
@@ -652,7 +654,7 @@ SQLstatementIntern(Client c, str *expr, 
        *o = *m;
 
        /* create private allocator */
-       m->sa = NULL;
+       assert(m->sa == NULL);
        SQLtrans(m);
        status = m->session->status;
 
@@ -732,7 +734,7 @@ SQLstatementIntern(Client c, str *expr, 
                        handle_error(m, c->fdout, status);
                        sqlcleanup(m, err);
                        /* restore the state */
-                       resetMalBlk(c->curprg->def, oldstop);
+                       MSresetInstructions(c->curprg->def, oldstop);
                        freeVariables(c,c->curprg->def, c->glb, oldvtop);
                        c->curprg->def->errors = 0;
                        goto endofcompile;
@@ -743,7 +745,7 @@ SQLstatementIntern(Client c, str *expr, 
 
                if( c->curprg->def->errors){
                        /* restore the state */
-                       resetMalBlk(c->curprg->def, oldstop);
+                       MSresetInstructions(c->curprg->def, oldstop);
                        freeVariables(c,c->curprg->def, c->glb, oldvtop);
                        c->curprg->def->errors = 0;
                        goto endofcompile;
@@ -758,9 +760,7 @@ SQLstatementIntern(Client c, str *expr, 
                        if (!output)
                                sql->out = NULL; /* no output */
                        msg = (str) runMAL(c, c->curprg->def, 1, 0, 0, 0);
-                       /*MSresetInstructions(c->curprg->def, 1);*/
-                       resetMalBlk(c->curprg->def, oldstop);
-                       /*freeVariables(c,c->curprg->def, 0, 0);*/
+                       MSresetInstructions(c->curprg->def, oldstop);
                        freeVariables(c,c->curprg->def, c->glb, oldvtop);
                }
                sqlcleanup(m, 0);
@@ -1473,7 +1473,7 @@ SQLparser(Client c)
                        }
                        showErrors(c);
                        /* restore the state */
-                       resetMalBlk(c->curprg->def, oldstop);
+                       MSresetInstructions(c->curprg->def, oldstop);
                        freeVariables(c, c->curprg->def, c->glb, oldvtop);
                        c->curprg->def->errors = 0;
                        msg = createException(PARSE, "SQLparser", "Semantic 
errors");
@@ -1661,8 +1661,7 @@ cleanup_engine:
        if (msg) {
                enum malexception type = getExceptionType(msg);
                if (type == OPTIMIZER) {
-                       resetMalBlk( c->curprg->def, 1);
-                       /* resetInstructions(c->curprg->def, 1);*/
+                       MSresetInstructions(c->curprg->def, 1);
                        freeVariables(c,c->curprg->def, c->glb, be->vtop);
                        be->language = oldlang;
                        c->glb = oldglb;
@@ -1702,8 +1701,7 @@ cleanup_engine:
        }
        be->q = NULL;
        sqlcleanup(be->mvc, 0);
-       resetMalBlk( c->curprg->def, 1);
-       /* resetInstructions(c->curprg->def, 1);*/
+       MSresetInstructions(c->curprg->def, 1);
        freeVariables(c,c->curprg->def, c->glb, be->vtop);
        be->language = oldlang;
        /*
@@ -1734,7 +1732,7 @@ SQLrecompile(Client c, backend *be)
        if (c->curprg->def->errors) {
                showErrors(c);
                /* restore the state */
-               resetMalBlk(c->curprg->def, oldstop);
+               MSresetInstructions(c->curprg->def, oldstop);
                freeVariables(c,c->curprg->def, c->glb, oldvtop);
                c->curprg->def->errors = 0;
                throw(SQL, "SQLrecompile", "M0M27!semantic errors");
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -884,6 +884,8 @@ func_destroy(sql_func *t)
                list_destroy(t->ops);
        if (t->query)
                _DELETE(t->query);
+       if (t->sa)
+               sa_destroy(t->sa);
        _DELETE(t);
 }
 
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -245,6 +245,7 @@ typedef struct sql_func {
                           example string concat
                        */
        sql_schema *s;
+       sql_allocator *sa;
 } sql_func;
 
 typedef struct sql_subfunc {
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -397,7 +397,7 @@ mvc_create(int clientid, backend_stack s
        m->errstr[ERRSIZE-1] = '\0';
 
        m->qc = qc_create(clientid, 0);
-       m->sa = sa_create();
+       m->sa = NULL;
 
        m->params = NULL;
        m->sizevars = MAXPARAMS;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to