Changeset: 0e6f6ca98ce4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0e6f6ca98ce4
Modified Files:
        gdk/gdk_string.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/atoms/mtime.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_user.c
        sql/server/sql_mvc.h
        sql/server/sql_var.c
Branch: resource_management
Log Message:

WIP fix memory leaks


diffs (138 lines):

diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -603,8 +603,8 @@ strFromStr(const char *restrict src, siz
 
        /* alloc new memory */
        if (*dst == NULL || *len < l) {
-               GDKfree(*dst);
-               *dst = GDKmalloc(*len = l);
+               //GDKfree(*dst);
+               *dst = ma_alloc(ma, *len = l);
                if (*dst == NULL) {
                        *len = 0;
                        return -1;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -995,6 +995,7 @@ runMALsequence(allocator *tmp_alloc, Cli
                                        freeException(v->val.sval);     /* old 
exception */
                                VALset(v, TYPE_str, ret);
                                //v->allocated = true;
+                               freeException(ret);
                                ret = MAL_SUCCEED;
                                MT_lock_unset(&mal_contextLock);
                        } else {
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -110,7 +110,7 @@ MTIMEcurrent_timestamp(Client ctx, times
 #define FINISH_BUFFER_SINGLE(MALFUNC) \
 bailout: \
        *ret = NULL; \
-       if (!msg && res && !(*ret = GDKstrdup(res))) \
+       if (!msg && res && !(*ret = MA_STRDUP(ctx->alloc, res))) \
                msg = createException(MAL, "batmtime." MALFUNC, SQLSTATE(HY013) 
MAL_MALLOC_FAIL); \
        GDKfree(res)
 
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -815,9 +815,9 @@ setVariable(Client cntxt, MalBlkPtr mb, 
                        if (!isOptimizerPipe(newopt) || strcmp(buf, newopt) == 
0) {
                                if ((msg = addPipeDefinition(cntxt, buf, 
newopt)))
                                        return msg;
-                               if (!sqlvar_set_string(find_global_var(m, s, 
varname), buf))
+                               if (!sqlvar_set_string(mb->ma, 
find_global_var(m, s, varname), buf))
                                        throw(SQL, "sql.setVariable", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
-                       } else if (!sqlvar_set_string(find_global_var(m, s, 
varname), newopt))
+                       } else if (!sqlvar_set_string(mb->ma, 
find_global_var(m, s, varname), newopt))
                                throw(SQL, "sql.setVariable", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                } else {
                        ValPtr ptr = &stk->stk[getArg(pci, 4)];
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -2220,7 +2220,7 @@ SQLrename_schema(Client cntxt, MalBlkPtr
                s = mvc_bind_schema(sql, "sys");
                assert(s);
 
-               if (!sqlvar_set_string(find_global_var(sql, s, 
"current_schema"), new_name))
+               if (!sqlvar_set_string(mb->ma, find_global_var(sql, s, 
"current_schema"), new_name))
                        throw(SQL, "sql.setVariable", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
 
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -872,9 +872,9 @@ monet5_user_set_def_schema(mvc *m, oid u
 
 
        /* reset the user and schema names */
-       if (!sqlvar_set_string(find_global_var(m, sys, "current_schema"), 
schema) ||
-               !sqlvar_set_string(find_global_var(m, sys, "current_user"), 
username) ||
-               !sqlvar_set_string(find_global_var(m, sys, "current_role"), 
userrole)) {
+       if (!sqlvar_set_string(m->sa, find_global_var(m, sys, 
"current_schema"), schema) ||
+               !sqlvar_set_string(m->sa, find_global_var(m, sys, 
"current_user"), username) ||
+               !sqlvar_set_string(m->sa, find_global_var(m, sys, 
"current_role"), userrole)) {
                res = -1;
        }
        _DELETE(schema_path);
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -298,7 +298,7 @@ extern int stack_nr_of_declared_tables(m
 
 extern atom *sqlvar_set(sql_var *var, ValRecord *v);
 extern str sqlvar_get_string(sql_var *var);
-extern str sqlvar_set_string(sql_var *var, const char *v);
+extern str sqlvar_set_string(allocator *sa, sql_var *var, const char *v);
 #ifdef HAVE_HGE
 extern hge val_get_number(const ValRecord *val);
 extern void sqlvar_set_number(sql_var *var, hge v);
diff --git a/sql/server/sql_var.c b/sql/server/sql_var.c
--- a/sql/server/sql_var.c
+++ b/sql/server/sql_var.c
@@ -11,6 +11,7 @@
  */
 
 #include "monetdb_config.h"
+#include "sql_mem.h"
 #include "sql_mvc.h"
 #include "sql_scan.h"
 #include "sql_list.h"
@@ -645,21 +646,24 @@ stack_nr_of_declared_tables(mvc *sql)
 }
 
 str
-sqlvar_set_string(sql_var *var, const char *val)
+sqlvar_set_string(allocator *sa, sql_var *var, const char *val)
 {
        atom *a = &var->var;
-       str new_val = _STRDUP(val);
 
-       if (a != NULL && new_val != NULL) {
-               ValRecord *v = &a->data;
+       if (a != NULL) {
+               allocator *ma = sa? sa : MT_thread_getallocator();
+               str new_val = SA_STRDUP(ma, val);
+               if (new_val) {
+                       ValRecord *v = &a->data;
 
-               //if (v->val.sval)
-               //      _DELETE(v->val.sval);
-               v->val.sval = new_val;
-               return new_val;
-       } else if (new_val) {
+                       //if (v->val.sval)
+                       //      _DELETE(v->val.sval);
+                       v->val.sval = new_val;
+                       return new_val;
+               }
+       }/* else if (new_val) {
                _DELETE(new_val);
-       }
+       }*/
        return NULL;
 }
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to