Changeset: 1c99592f6b9f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1c99592f6b9f
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_psm.c
        sql/storage/store.c
Branch: nospare
Log Message:

fixed some leaks


diffs (97 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4523,12 +4523,16 @@ cascade_ukey(backend *be, stmt **updates
                        case ACT_SET_NULL:
                        case ACT_SET_DEFAULT:
                        case ACT_CASCADE:
-                               if (!sql_update_cascade_Fkeys(be, fk, tids, 
updates, ((sql_fkey*)fk)->on_update))
+                               if (!sql_update_cascade_Fkeys(be, fk, tids, 
updates, ((sql_fkey*)fk)->on_update)) {
+                                       list_destroy(keys);
                                        return -1;
+                               }
                                break;
                        default:        /*RESTRICT*/
-                               if (!join_updated_pkey(be, fk, tids, updates))
+                               if (!join_updated_pkey(be, fk, tids, updates)) {
+                                       list_destroy(keys);
                                        return -1;
+                               }
                        }
                }
                list_destroy(keys);
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
@@ -1018,10 +1018,14 @@ rel_create_func(sql_query *query, dlist 
                                return sql_error(sql, 01, SQLSTATE(42000) 
"CREATE %s: external name %s.%s not bound (%s.%s)", F, fmod, fnme, 
s->base.name, fname );
                        } else {
                                sql_func *f = sf->func;
-                               if (!f->mod || strcmp(f->mod, fmod))
+                               if (!f->mod || strcmp(f->mod, fmod)) {
+                                       _DELETE(f->mod);
                                        f->mod = SA_STRDUP(NULL, fmod) 
;//(f->sa)?sa_strdup(f->sa, fmod):sa_strdup(sql->pa, fmod);
-                               if (!f->imp || strcmp(f->imp, fnme))
+                               }
+                               if (!f->imp || strcmp(f->imp, fnme)) {
+                                       _DELETE(f->imp);
                                        f->imp = SA_STRDUP(NULL, 
fnme);//(f->sa)?sa_strdup(f->sa, fnme):sa_strdup(sql->pa, fnme);
+                               }
                                if (!f->mod || !f->imp)
                                        return sql_error(sql, 02, 
SQLSTATE(HY013) "CREATE %s: could not allocate space", F);
                                f->sql = 0; /* native */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3375,7 +3375,7 @@ sql_trans_rollback(sql_trans *tr)
                                        list_prepend(tr->localtmps.set, 
dup_table(tt));
                                n = next;
                        }
-                       list_destroy(tr->localtmps.dset);
+                       list_destroy2(tr->localtmps.dset, tr->store);
                }
                /* cleanup new */
                if (tr->localtmps.nelm) {
@@ -3459,6 +3459,7 @@ sql_trans_destroy(sql_trans *tr)
        }
        if (tr->changes)
                sql_trans_rollback(tr);
+       cs_destroy(&tr->localtmps, tr->store);
        _DELETE(tr);
        return res;
 }
@@ -3531,7 +3532,7 @@ sql_trans_create(sqlstore *store, sql_tr
        if (tr) {
                tr->ts = store_timestamp(store);
                tr->active = 1;
-               cs_new(&tr->localtmps, tr->sa, (fdestroy) NULL);
+               cs_new(&tr->localtmps, tr->sa, (fdestroy) &table_destroy);
        }
        return tr;
 }
@@ -3854,10 +3855,15 @@ sys_drop_default_object(sql_trans *tr, s
                char *schema = NULL, *seq_name = NULL;
 
                extract_schema_and_sequence_name(tr->sa, col->def + 
strlen(next_value_for), &schema, &seq_name);
-               if (!schema || !seq_name || !(s = find_sql_schema(tr, schema)))
+               if (!schema || !seq_name || !(s = find_sql_schema(tr, schema))) 
{
+                       _DELETE(schema);
+                       _DELETE(seq_name);
                        return -1;
+               }
 
                seq = find_sql_sequence(tr, s, seq_name);
+               _DELETE(schema);
+               _DELETE(seq_name);
                if (seq && sql_trans_get_dependency_type(tr, seq->base.id, 
BEDROPPED_DEPENDENCY) > 0) {
                        sys_drop_sequence(tr, seq, drop_action);
                        if (os_del(s->seqs, tr, seq->base.name, 
dup_base(&seq->base)))
@@ -5897,7 +5903,7 @@ sql_trans_create_sequence(sql_trans *tr,
        sql_table *sysseqs = find_sql_table(tr, syss, "sequences");
        sql_sequence *seq = create_sql_sequence_with_id(tr->sa, 
next_oid(tr->store), s, name, start, min, max, inc, cacheinc, cycle);
 
-       if (os_add(s->seqs, tr, seq->base.name, dup_base(&seq->base))) {
+       if (os_add(s->seqs, tr, seq->base.name, &seq->base)) {
                seq_destroy(store, seq);
                return NULL;
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to