Changeset: 2884b341859a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2884b341859a
Modified Files:
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: nospare
Log Message:

fixing some more leak/reference issues


diffs (truncated from 341 to 300 lines):

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
@@ -1842,10 +1842,12 @@ mvc_append_exec_wrap(Client cntxt, MalBl
        sqlstore *store = m->session->tr->store;
 
        int ret;
+       ptr *res_cookie = getArgReference_ptr(stk, pci, 0);
        ptr cookie = *getArgReference_ptr(stk, pci, 1);
        ptr incoming = getArgReference(stk, pci, 2);
        int incoming_type = getArgType(mb, pci, 2);
 
+       *res_cookie = cookie;
        if (incoming_type > GDKatomcnt)
                incoming_type = TYPE_bat;
 
@@ -1883,10 +1885,12 @@ mvc_update_exec_wrap(Client cntxt, MalBl
        sqlstore *store = m->session->tr->store;
        (void) mb;
        int ret;
+       ptr *res_cookie = getArgReference_ptr(stk, pci, 0);
        ptr cookie = *getArgReference_ptr(stk, pci, 1);
        bat tids_bat = *getArgReference_bat(stk, pci, 2);
        bat incoming_bat = *getArgReference_bat(stk, pci, 3);
 
+       *res_cookie = cookie;
        BAT *data = BATdescriptor(incoming_bat);
        if (data == NULL)
                throw(SQL, "sql.update_exec", SQLSTATE(HY005) "Cannot access 
column descriptor");
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -763,7 +763,7 @@ bind_col_data(sql_trans *tr, sql_column 
        if ((!tr->parent || !tr_version_of_parent(tr, obat->ts)) && obat->ts >= 
TRANSACTION_ID_BASE && !isTempTable(c->t))
                /* abort */
                return NULL;
-       obat = col_timestamp_delta(tr, c);
+       obat = timestamp_delta(tr, c->data, type, isTempTable(c->t));
        sql_delta* bat = ZNEW(sql_delta);
        if(!bat)
                return NULL;
@@ -1126,9 +1126,15 @@ delta_delete_val( sql_dbat *bat, oid rid
        return LOG_OK;
 }
 
-static void
-_destroy_dbat(sql_dbat *bat)
+static int
+destroy_dbat(sql_dbat *bat)
 {
+       int ok = LOG_OK;
+
+       if (--bat->refcnt > 0)
+               return LOG_OK;
+       if (bat->next)
+               ok = destroy_dbat(bat->next);
        if (bat->dname)
                _DELETE(bat->dname);
        if (bat->dbid)
@@ -1140,22 +1146,7 @@ static void
        bat->dbid = 0;
        bat->dname = NULL;
        _DELETE(bat);
-}
-
-static int
-destroy_dbat(sql_trans *tr, sql_dbat *bat)
-{
-       if (--bat->refcnt > 0)
-               return LOG_OK;
-       sql_dbat *n;
-
-       (void)tr;
-       while(bat) {
-               n = bat->next;
-               _destroy_dbat(bat);
-               bat = n;
-       }
-       return LOG_OK;
+       return ok;
 }
 
 static sql_dbat *
@@ -1733,7 +1724,7 @@ create_idx(sql_trans *tr, sql_idx *ni)
                sql_column *c = ni->t->columns.set->h->data;
                sql_delta *d;
 
-               d = timestamp_delta(tr, c->data, c->type.type->localtype, 
isTempTable(c->t));
+               d = col_timestamp_delta(tr, c);
                /* Here we also handle indices created through alter stmts */
                /* These need to be created aligned to the existing data */
                if (d->bid) {
@@ -1991,6 +1982,12 @@ log_destroy_delta(sql_trans *tr, sql_del
 static int
 destroy_delta(sql_delta *b)
 {
+       int ok = LOG_OK;
+
+       if (--b->refcnt > 0)
+               return LOG_OK;
+       if (b->next)
+               ok = destroy_delta(b->next);
        if (b->name)
                _DELETE(b->name);
        if (b->ibid)
@@ -2006,23 +2003,8 @@ destroy_delta(sql_delta *b)
        b->bid = b->ibid = b->uibid = b->uvbid = 0;
        b->name = NULL;
        b->cached = NULL;
-       return LOG_OK;
-}
-
-static int
-destroy_bat(sql_delta *b)
-{
-       if (--b->refcnt > 0)
-               return LOG_OK;
-       sql_delta *n;
-
-       while(b) {
-               n = b->next;
-               destroy_delta(b);
-               _DELETE(b);
-               b = n;
-       }
-       return LOG_OK;
+       _DELETE(b);
+       return ok;
 }
 
 static int
@@ -2031,7 +2013,7 @@ destroy_col(sqlstore *store, sql_column 
        (void)store;
        int ok = LOG_OK;
        if (c->data)
-               ok = destroy_bat(c->data);
+               ok = destroy_delta(c->data);
        c->data = NULL;
        return ok;
 }
@@ -2059,7 +2041,7 @@ destroy_idx(sqlstore *store, sql_idx *i)
        (void)store;
        int ok = LOG_OK;
        if (i->data)
-               ok = destroy_bat(i->data);
+               ok = destroy_delta(i->data);
        i->data = NULL;
        return ok;
 }
@@ -2097,7 +2079,7 @@ destroy_del(sqlstore *store, sql_table *
        (void)store;
        int ok = LOG_OK;
        if (t->data)
-               ok = destroy_dbat(NULL, t->data);
+               ok = destroy_dbat(t->data);
        t->data = NULL;
        return ok;
 }
@@ -2477,18 +2459,16 @@ tr_merge_delta( sql_trans *tr, sql_delta
 }
 
 static int
-tr_merge_dbat(sql_trans *tr, sql_dbat *tdb)
+tr_merge_dbat(sql_dbat *tdb)
 {
-       //sqlstore *store = tr->store;
        int ok = LOG_OK;
 
        if (tdb->cached) {
                bat_destroy(tdb->cached);
                tdb->cached = NULL;
        }
-       //assert(ATOMIC_GET(&store->nr_active)==1);
        if (tdb->next) {
-               ok = destroy_dbat(tr, tdb->next);
+               ok = destroy_dbat(tdb->next);
                tdb->next = NULL;
        }
        return ok;
@@ -2600,7 +2580,7 @@ commit_update_col( sql_trans *tr, sql_ch
                }
                if (delta && delta != d) {
                        if (delta->next) {
-                               ok = destroy_bat(delta->next);
+                               ok = destroy_delta(delta->next);
                                delta->next = NULL;
                        }
                }
@@ -2670,7 +2650,7 @@ commit_update_idx( sql_trans *tr, sql_ch
                        o->next = d->next;
                d->next = NULL;
                destroy_delta(d);
-       } if (ok == LOG_OK && !tr->parent) {
+       } else if (ok == LOG_OK && !tr->parent) {
                sql_delta *d = delta;
                /* clean up and merge deltas */
                while (delta && delta->ts > oldest) {
@@ -2678,7 +2658,7 @@ commit_update_idx( sql_trans *tr, sql_ch
                }
                if (delta && delta != d) {
                        if (delta->next) {
-                               ok = destroy_bat(delta->next);
+                               ok = destroy_delta(delta->next);
                                delta->next = NULL;
                        }
                }
@@ -2700,7 +2680,7 @@ savepoint_commit_dbat( sql_dbat *dbat, u
                        od->next = n;
                        *dbat = t;
                        dbat->next = NULL;
-                       _destroy_dbat(dbat);
+                       destroy_dbat(dbat);
                        return od;
                }
        }
@@ -2769,7 +2749,7 @@ commit_update_del( sql_trans *tr, sql_ch
                else
                        o->next = d->next;
                d->next = NULL;
-               _destroy_dbat(d);
+               destroy_dbat(d);
        } else if (ok == LOG_OK && !tr->parent) {
                sql_dbat *d = dbat;
                /* clean up and merge deltas */
@@ -2778,12 +2758,12 @@ commit_update_del( sql_trans *tr, sql_ch
                }
                if (dbat && dbat != d) {
                        if (dbat->next) {
-                               ok = destroy_dbat(tr, dbat->next);
+                               ok = destroy_dbat(dbat->next);
                                dbat->next = NULL;
                        }
                }
                if (ok == LOG_OK && dbat == d && oldest == commit_ts)
-                       ok = tr_merge_dbat(tr, dbat);
+                       ok = tr_merge_dbat(dbat);
        } else if (ok == LOG_OK && tr->parent) {/* cleanup older save points */
                t->data = savepoint_commit_dbat(dbat, commit_ts);
        }
@@ -2873,7 +2853,7 @@ tc_gc_del( sql_store Store, sql_change *
                else
                        o->next = d->next;
                d->next = NULL;
-               _destroy_dbat(d);
+               destroy_dbat(d);
        }
 #endif
        if (t->data != change->data) /* data is freed by commit */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3822,7 +3822,7 @@ sys_drop_default_object(sql_trans *tr, s
                seq = find_sql_sequence(tr, s, 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, &seq->base))
+                       if (os_del(s->seqs, tr, seq->base.name, 
dup_base(&seq->base)))
                                return -2;
                }
        }
@@ -3923,7 +3923,7 @@ sys_drop_part(sql_trans *tr, sql_part *p
        /* merge table depends on part table */
        sql_trans_drop_dependency(tr, pt->member->base.id, mt->base.id, 
TABLE_DEPENDENCY);
 
-       os_del(mt->s->parts, tr, pt->base.name, &pt->base);
+       os_del(mt->s->parts, tr, pt->base.name, dup_base(&pt->base));
        store->table_api.table_delete(tr, sysobj, obj_oid);
 }
 
@@ -4130,7 +4130,7 @@ sql_trans_drop_type(sql_trans *tr, sql_s
        sql_type *t = sql_trans_find_type(tr, s, id);
 
        sys_drop_type(tr, t, drop_action);
-       os_del(s->types, tr, t->base.name, &t->base);
+       os_del(s->types, tr, t->base.name, dup_base(&t->base));
        return 1;
 }
 
@@ -4254,7 +4254,7 @@ sql_trans_drop_func(sql_trans *tr, sql_s
        }
 
        sys_drop_func(tr, func, DROP_CASCADE);
-       os_del(s->funcs, tr, func->base.name, &func->base);
+       os_del(s->funcs, tr, func->base.name, dup_base(&func->base));
 
        if (drop_action == DROP_CASCADE_START && tr->dropped) {
                list_destroy(tr->dropped);
@@ -4271,7 +4271,7 @@ build_drop_func_list_item(sql_trans *tr,
        if (b) {
                sql_func *func = (sql_func*)b;
                sys_drop_func(tr, func, DROP_CASCADE);
-               os_del(s->funcs, tr, func->base.name, &func->base);
+               os_del(s->funcs, tr, func->base.name, dup_base(&func->base));
        }
 }
 
@@ -4426,7 +4426,7 @@ sql_trans_drop_schema(sql_trans *tr, sql
        sql_trans_drop_any_comment(tr, s->base.id);
        sql_trans_drop_obj_priv(tr, s->base.id);
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to