Changeset: c33980c7288d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c33980c7288d
Modified Files:
        sql/storage/store.c
Branch: triggers
Log Message:

fix memory leaks


diffs (64 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -6764,6 +6764,7 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
        return res;
 }
 
+
 static int
 sql_trans_create_table_trigger(sql_trigger **tres, sql_trans *tr, sql_table 
*t, const char *name,
        sht time, sht orientation, sht event, const char *old_name, const char 
*new_name,
@@ -6799,15 +6800,17 @@ sql_trans_create_table_trigger(sql_trigg
        if(t) {
                assert(isGlobal(t));
                if ((res = ol_add(t->triggers, &nt->base)) ||
-                       (res = os_add(t->s->triggers, tr, nt->base.name, 
dup_base(&nt->base))))
+                       (res = os_add(t->s->triggers, tr, nt->base.name, 
dup_base(&nt->base)))) {
                        return res;
+               }
        }
        oid tid = t? (oid) t->base.id : oid_nil;
 
        if ((res = store->table_api.table_insert(tr, systrigger, &nt->base.id, 
&nt->base.name, &tid, &nt->time, &nt->orientation,
                                                         &nt->event, 
(nt->old_name)?&nt->old_name:&strnil, (nt->new_name)?&nt->new_name:&strnil,
-                                                        
(nt->condition)?&nt->condition:&strnil, &nt->statement)))
-               return res;
+                                                        
(nt->condition)?&nt->condition:&strnil, &nt->statement))) {
+               return res;
+       }
        *tres = nt;
        return res;
 }
@@ -6824,6 +6827,7 @@ sql_trans_create_trigger(sql_trigger **t
                                new_name, condition, statement);
 
        // triggers not bound to objects (e.g. table)
+       // are added to sys->triggers
 
        sqlstore *store = tr->store;
        sql_schema *syss = find_sql_schema(tr, "sys");
@@ -6846,14 +6850,19 @@ sql_trans_create_trigger(sql_trigger **t
        if (condition)
                nt->condition =_STRDUP(condition);
        nt->statement =_STRDUP(statement);
-       if ((res = os_add(syss->triggers, tr, nt->base.name, 
dup_base(&nt->base))))
-               return res;
+       if ((res = os_add(syss->triggers, tr, nt->base.name, &nt->base))) {
+               trigger_destroy(store, nt);
+               return res;
+       }
        oid tid = oid_nil;
 
        if ((res = store->table_api.table_insert(tr, systrigger, &nt->base.id, 
&nt->base.name, &tid, &nt->time, &nt->orientation,
                                                         &nt->event, 
(nt->old_name)?&nt->old_name:&strnil, (nt->new_name)?&nt->new_name:&strnil,
-                                                        
(nt->condition)?&nt->condition:&strnil, &nt->statement)))
-               return res;
+                                                        
(nt->condition)?&nt->condition:&strnil, &nt->statement))) {
+               trigger_destroy(store, nt);
+               return res;
+       }
+
        *tres = nt;
        return res;
 }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to