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