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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list