Changeset: 5ac970b567e4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ac970b567e4
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_prop.c
        sql/server/rel_psm.c
        sql/storage/bat/bat_logger.c
Branch: Jun2016
Log Message:

Fix a bunch of leaks.


diffs (155 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -212,9 +212,13 @@ exp_print(mvc *sql, stream *fout, sql_ex
                mnstr_printf(fout, " NOT NULL");
        if (e->p) {
                prop *p = e->p;
+               char *pv;
 
-               for (; p; p = p->p) 
-                       mnstr_printf(fout, " %s %s", propkind2string(p), 
propvalue2string(p));
+               for (; p; p = p->p) {
+                       pv = propvalue2string(p);
+                       mnstr_printf(fout, " %s %s", propkind2string(p), pv);
+                       GDKfree(pv);
+               }
        }
        if (e->name && alias) {
                mnstr_printf(fout, " as ");
@@ -502,9 +506,13 @@ rel_print_(mvc *sql, stream  *fout, sql_
        }
        if (rel->p) {
                prop *p = rel->p;
+               char *pv;
 
-               for (; p; p = p->p) 
-                       mnstr_printf(fout, " %s %s", propkind2string(p), 
propvalue2string(p));
+               for (; p; p = p->p) {
+                       pv = propvalue2string(p);
+                       mnstr_printf(fout, " %s %s", propkind2string(p), pv);
+                       GDKfree(pv);
+               }
        }
 }
 
diff --git a/sql/server/rel_prop.c b/sql/server/rel_prop.c
--- a/sql/server/rel_prop.c
+++ b/sql/server/rel_prop.c
@@ -99,5 +99,5 @@ propvalue2string( prop *p)
                        break;
                }
        }
-       return "";
+       return _STRDUP("");
 }
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -725,8 +725,10 @@ rel_create_func(mvc *sql, dlist *qname, 
                                char *tpe =  subtype2string((sql_subtype *) 
n->data);
                                
                                if (arg_list) {
+                                       char *t = arg_list;
                                        arg_list = sql_message("%s, %s", 
arg_list, tpe);
-                                       _DELETE(tpe);   
+                                       _DELETE(t);
+                                       _DELETE(tpe);
                                } else {
                                        arg_list = tpe;
                                }
@@ -911,19 +913,24 @@ resolve_func( mvc *sql, sql_schema *s, c
                        node *n;
                        
                        if (type_list->cnt > 0) {
+                               void *e;
                                for (n = type_list->h; n; n = n->next) {
                                        char *tpe =  
subtype2string((sql_subtype *) n->data);
                                
                                        if (arg_list) {
+                                               char *t = arg_list;
                                                arg_list = sql_message("%s, 
%s", arg_list, tpe);
-                                               _DELETE(tpe);   
+                                               _DELETE(tpe);
+                                               _DELETE(t);
                                        } else {
                                                arg_list = tpe;
                                        }
                                }
                                list_destroy(list_func);
                                list_destroy(type_list);
-                               return sql_error(sql, 02, "%s %s%s: no such 
%s%s '%s' (%s)", op, KF, F, kf, f, name, arg_list);
+                               e = sql_error(sql, 02, "%s %s%s: no such %s%s 
'%s' (%s)", op, KF, F, kf, f, name, arg_list);
+                               _DELETE(arg_list);
+                               return e;
                        }
                        list_destroy(list_func);
                        list_destroy(type_list);
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -211,37 +211,39 @@ bl_postversion( void *lg)
                b = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s, 
"types_systemname")));
                bi = bat_iterator(b);
                for (p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
-                       char *t = (char*)BUNtail(bi, p);
-                       if (strcmp(toLower(t), "wkb") == 0){
-                               geomUpgrade++;
+                       char *t = toLower(BUNtail(bi, p));
+                       geomUpgrade = strcmp(t, "wkb") == 0;
+                       GDKfree(t);
+                       if (geomUpgrade)
                                break;
-                       }
                }
                bat_destroy(b);
 
-               /* test whether the catalog contains information about
-                * geometry columns */
-               b = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s, 
"_columns_type")));
-               bi = bat_iterator(b);
-               for (p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
-                       char *t = (char*)BUNtail(bi, p);
-                       if (strcmp(toLower(t), "point") == 0 ||
-                               strcmp(toLower(t), "curve") == 0 ||
-                               strcmp(toLower(t), "linestring") == 0 ||
-                               strcmp(toLower(t), "surface") == 0 ||
-                               strcmp(toLower(t), "polygon") == 0 ||
-                               strcmp(toLower(t), "multipoint") == 0 ||
-                               strcmp(toLower(t), "multicurve") == 0 ||
-                               strcmp(toLower(t), "multilinestring") == 0 ||
-                               strcmp(toLower(t), "multisurface") == 0 ||
-                               strcmp(toLower(t), "multipolygon") == 0 ||
-                               strcmp(toLower(t), "geometry") == 0 ||
-                               strcmp(toLower(t), "geometrycollection") == 0){
-                               geomUpgrade++;
-                               break;
+               if (!geomUpgrade) {
+                       /* test whether the catalog contains
+                        * information about geometry columns */
+                       b = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, 
s, "_columns_type")));
+                       bi = bat_iterator(b);
+                       for (p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
+                               char *t = toLower(BUNtail(bi, p));
+                               geomUpgrade = strcmp(t, "point") == 0 ||
+                                       strcmp(t, "curve") == 0 ||
+                                       strcmp(t, "linestring") == 0 ||
+                                       strcmp(t, "surface") == 0 ||
+                                       strcmp(t, "polygon") == 0 ||
+                                       strcmp(t, "multipoint") == 0 ||
+                                       strcmp(t, "multicurve") == 0 ||
+                                       strcmp(t, "multilinestring") == 0 ||
+                                       strcmp(t, "multisurface") == 0 ||
+                                       strcmp(t, "multipolygon") == 0 ||
+                                       strcmp(t, "geometry") == 0 ||
+                                       strcmp(t, "geometrycollection") == 0;
+                               GDKfree(t);
+                               if (geomUpgrade)
+                                       break;
                        }
+                       bat_destroy(b);
                }
-               bat_destroy(b);
 
                if (!geomUpgrade && geomcatalogfix_get() == NULL) {
                        /* The catalog knew nothing about geometries
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to