Changeset: 4ffa015beaf0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ffa015beaf0
Modified Files:
gdk/gdk_system.h
monetdb5/mal/mal.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_private.h
monetdb5/mal/mal_scenario.c
monetdb5/mal/mal_session.c
sql/backends/monet5/sql_scenario.c
sql/storage/store.c
tools/mserver/shutdowntest.c
Branch: Jul2017
Log Message:
fixed some leaks
diffs (truncated from 316 to 300 lines):
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -224,7 +224,7 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
/* since the lock is in memory that is governed by the */ \
/* SQL storage allocator, and hence we have no control */ \
/* over when the lock is destroyed and the memory freed */ \
- if (strncmp((l)->name, "sa_", 3) != 0) { \
+ if (0 && strncmp((l)->name, "sa_", 3) != 0) { \
MT_Lock * volatile _p; \
/* save a copy for statistical purposes */ \
_p = GDKmalloc(sizeof(MT_Lock)); \
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -149,12 +149,14 @@ void mserver_reset(int exit)
GDKfree(mal_clients->prompt);
GDKfree(mal_clients->username);
freeStack(mal_clients->glb);
- freeSymbol(mal_clients->curprg);
+ if (mal_clients->nspace)
+ freeModule(mal_clients->nspace);
mal_client_reset();
mal_linker_reset();
mal_resource_reset();
mal_runtime_reset();
mal_module_reset();
+ mdbExit();
memset((char*)monet_cwd,0, sizeof(monet_cwd));
monet_memory = 0;
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -57,7 +57,7 @@ void
mal_client_reset(void)
{
MAL_MAXCLIENTS = 0;
- if ( mal_clients)
+ if (mal_clients)
GDKfree(mal_clients);
}
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -77,6 +77,15 @@ mdbInit(void)
return 0;
}
+void
+mdbExit(void)
+{
+ if (mdbTable) {
+ GDKfree(mdbTable);
+ mdbTable = 0;
+ }
+}
+
static char
isBreakpoint(Client cntxt, MalBlkPtr mb, InstrPtr p, int pc)
{
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -22,8 +22,6 @@
__attribute__((__visibility__("hidden")));
__hidden str defaultScenario(Client c) /* used in src/mal/mal_session.c */
__attribute__((__visibility__("hidden")));
-__hidden void exitScenario(Client c) /* used in
src/mal/mal_session.c */
- __attribute__((__visibility__("hidden")));
__hidden void mdbStep(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int pc)
__attribute__((__visibility__("hidden")));
@@ -56,6 +54,8 @@
__hidden int mdbInit(void)
__attribute__((__visibility__("hidden")));
+__hidden void mdbExit(void)
+ __attribute__((__visibility__("hidden")));
__hidden str createScriptException(MalBlkPtr, int, enum malexception,
const char *, _In_z_ _Printf_format_string_ const char *, ...)
diff --git a/monetdb5/mal/mal_scenario.c b/monetdb5/mal/mal_scenario.c
--- a/monetdb5/mal/mal_scenario.c
+++ b/monetdb5/mal/mal_scenario.c
@@ -469,33 +469,6 @@ resetScenario(Client c)
}
/*
-void
-exitScenario(Client c)
-{
- Scenario scen = scenarioRec;
-
- if (c->scenario == 0)
- return;
- scen = findScenario(c->scenario);
- if (scen->exitSystemCmd)
- (*scen->exitSystemCmd) (c);
- c->scenario = NULL;
-}
-*/
-
-void
-exitScenario(Client c)
-{
- int i;
- Scenario scen = scenarioRec;
-
- for (i = 0; i < MAXSCEN && scen->name; i++, scen++) {
- if (scen->exitSystemCmd)
- (*scen->exitSystemCmd)(c);
- }
-}
-
-/*
* The building blocks of scenarios are routines obeying a strict
* name signature. They require exclusive access to the client
* record. Any specific information should be accessible from
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -480,21 +480,15 @@ MSserveClient(void *dummy)
c->backup = 0;
}
if (c->curprg) {
- assert(0);
freeSymbol(c->curprg);
c->curprg = 0;
}
- if (c->nspace) {
- assert(0);
- }
- if (c->mode == FINISHCLIENT && isAdministrator(c))
- exitScenario(c);
if (!isAdministrator(c))
MCcloseClient(c);
- if (c->nspace && strcmp(c->nspace->name, "user") == 0) {
- GDKfree(c->nspace->space);
- GDKfree(c->nspace);
+
+ if (c->nspace /*&& strcmp(c->nspace->name, "user") == 0*/) {
+ freeModule(c->nspace);
c->nspace = NULL;
}
}
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
@@ -188,18 +188,29 @@ SQLprelude(void *ret)
}
str
+SQLexit(Client c)
+{
+#ifdef _SQL_SCENARIO_DEBUG
+ fprintf(stderr, "#SQLexit\n");
+#endif
+ (void) c; /* not used */
+ MT_lock_set(&sql_contextLock);
+ if (SQLinitialized) {
+ mvc_exit();
+ SQLinitialized = FALSE;
+ }
+ MT_lock_unset(&sql_contextLock);
+ return MAL_SUCCEED;
+}
+
+str
SQLepilogue(void *ret)
{
char *s = "sql", *m = "msql";
str res;
(void) ret;
- MT_lock_set(&sql_contextLock);
- if (SQLinitialized) {
- mvc_exit();
- SQLinitialized = FALSE;
- }
- MT_lock_unset(&sql_contextLock);
+ SQLexit(NULL);
/* this function is never called, but for the style of it, we clean
* up our own mess */
res = msab_retreatScenario(m);
@@ -265,18 +276,6 @@ SQLinit(void)
return MAL_SUCCEED;
}
-str
-SQLexit(Client c)
-{
-#ifdef _SQL_SCENARIO_DEBUG
- fprintf(stderr, "#SQLexit\n");
-#endif
- (void) c; /* not used */
- if (SQLinitialized == FALSE)
- throw(SQL, "SQLexit", "Catalogue not available");
- return MAL_SUCCEED;
-}
-
#define SQLglobal(name, val) \
stack_push_var(sql, name, &ctype); \
stack_set_var(sql, name, VALset(&src, ctype.type->localtype, val));
@@ -433,7 +432,7 @@ SQLinitClient(Client c)
#ifdef _SQL_SCENARIO_DEBUG
fprintf(stderr, "#SQLinitClient\n");
#endif
- if (SQLinitialized == 0 && (msg = SQLprelude(NULL)) != MAL_SUCCEED)
+ if (SQLinitialized == 0 && (msg = SQLprelude(NULL)) != MAL_SUCCEED)
return msg;
MT_lock_set(&sql_contextLock);
/*
@@ -600,13 +599,11 @@ SQLinitClient(Client c)
str
SQLresetClient(Client c)
{
+ if (c->sqlcontext == NULL)
+ throw(SQL, "SQLexitClient", "MVC catalogue not available");
if (c->sqlcontext) {
- backend *be = NULL;
- mvc *m = NULL;
- if (c->sqlcontext == NULL)
- throw(SQL, "SQLexitClient", "MVC catalogue not
available");
- be = (backend *) c->sqlcontext;
- m = be->mvc;
+ backend *be = c->sqlcontext;
+ mvc *m = be->mvc;
assert(m->session);
if (m->session->auto_commit && m->session->active) {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -199,7 +199,6 @@ sql_trans_destroy(sql_trans *t)
{
sql_trans *res = t->parent;
- transactions--;
#ifdef STORE_DEBUG
fprintf(stderr, "#destroy trans (%p)\n", t);
#endif
@@ -219,6 +218,7 @@ sql_trans_destroy(sql_trans *t)
cs_destroy(&t->schemas);
sa_destroy(t->sa);
_DELETE(t);
+ transactions--;
return res;
}
@@ -482,7 +482,10 @@ load_trigger(sql_trans *tr, sql_table *t
if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), v) != 0)
nt->condition = sa_strdup(tr->sa, v);
_DELETE(v);
- nt->statement = table_funcs.column_find_value(tr,
find_sql_column(triggers, "statement"), rid);
+ v = table_funcs.column_find_value(tr, find_sql_column(triggers,
"statement"), rid);
+ if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), v) != 0)
+ nt->statement = sa_strdup(tr->sa, v);
+ _DELETE(v);
nt->t = t;
nt->columns = list_new(tr->sa, (fdestroy) NULL);
@@ -1387,6 +1390,7 @@ store_load(void) {
sequences_init();
gtrans = tr = create_trans(sa, backend_stk);
+ transactions = 0;
active_sessions = sa_list(sa);
if (logger_funcs.log_isnew()) {
@@ -3439,7 +3443,6 @@ sql_trans_create(backend_stack stk, sql_
{
sql_trans *tr = NULL;
- transactions++;
if (gtrans) {
if (!parent && spares > 0 && !name) {
tr = spare_trans[--spares];
@@ -3451,6 +3454,7 @@ sql_trans_create(backend_stack stk, sql_
#ifdef STORE_DEBUG
fprintf(stderr, "#new trans (%p)\n", tr);
#endif
+ transactions++;
}
}
return tr;
diff --git a/tools/mserver/shutdowntest.c b/tools/mserver/shutdowntest.c
--- a/tools/mserver/shutdowntest.c
+++ b/tools/mserver/shutdowntest.c
@@ -34,7 +34,7 @@ CREATE_SQL_FUNCTION_PTR(int,SQLautocommi
CREATE_SQL_FUNCTION_PTR(str,SQLexitClient);
CREATE_SQL_FUNCTION_PTR(str,SQLinitClient);
CREATE_SQL_FUNCTION_PTR(str,SQLstatementIntern);
-
+CREATE_SQL_FUNCTION_PTR(void,res_table_destroy);
static int monetdb_initialized = 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list