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

Reply via email to