Changeset: d05b9dcd1f88 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d05b9dcd1f88
Modified Files:
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/storage/objectset.c
        sql/storage/store.c
Branch: nospare
Log Message:

more cleanup


diffs (194 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -612,7 +612,7 @@ static sql_func *
 sql_create_func_(sql_allocator *sa, const char *name, const char *mod, const 
char *imp, sql_ftype type, bit semantics, bit side_effect,
                                 int fix_scale, unsigned int res_scale, 
sql_type *res, int nargs, va_list valist)
 {
-       list *ops = sa_list(sa);
+       list *ops = SA_LIST(sa, (fdestroy) &arg_destroy);
        sql_arg *fres = NULL;
        sql_func *t = SA_ZNEW(sa, sql_func);
 
@@ -631,7 +631,7 @@ sql_create_func_(sql_allocator *sa, cons
        if (fres) {
                if (res_scale)
                        fres->type.scale = res_scale;
-               t->res = list_append(sa_list(sa), fres);
+               t->res = list_append(SA_LIST(sa, (fdestroy) &arg_destroy), 
fres);
        } else
                t->res = NULL;
        t->nr = list_length(funcs);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -840,4 +840,6 @@ extract_schema_and_sequence_name(sql_all
        }
 }
 
+extern void arg_destroy(sql_store store, sql_arg *a);
+
 #endif /* SQL_CATALOG_H */
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -863,7 +863,6 @@ mvc_destroy(mvc *m)
                        (void)sql_trans_end(m->session, 0);
                while (tr->parent)
                        tr = sql_trans_destroy(tr);
-               m->session->tr = NULL;
        }
        sql_session_destroy(m->session);
        store_unlock(m->store);
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -582,7 +582,8 @@ os_destroy(objectset *os, sql_store stor
                return;
        if (os->destroy) {
                for(versionhead  *n=os->name_based_h; n; n=n->next) {
-                       os->destroy(n->ov, store);
+                       /* TODO destroy objectversion */
+                       os->destroy(store, n->ov->b);
                }
        }
        versionhead  *n = os->name_based_h;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -95,16 +95,25 @@ type_destroy(sqlstore *store, sql_type *
        _DELETE(t);
 }
 
+void
+arg_destroy(sql_store store, sql_arg *a)
+{
+       (void)store;
+       _DELETE(a);
+}
+
 static void
 func_destroy(sqlstore *store, sql_func *f)
 {
-       (void)store;
        assert(f->base.refcnt > 0);
        if (--(f->base.refcnt) > 0)
                return;
+       if (f->res)
+               list_destroy2(f->res, store);
        list_destroy2(f->ops, store);
        _DELETE(f->imp);
        _DELETE(f->mod);
+       _DELETE(f->query);
        _DELETE(f->base.name);
        _DELETE(f);
 }
@@ -912,7 +921,7 @@ load_func(sql_trans *tr, sql_schema *s, 
 
        TRC_DEBUG(SQL_STORE, "Load function: %s\n", t->base.name);
 
-       t->ops = list_new(tr->sa, (fdestroy)NULL);
+       t->ops = list_new(tr->sa, (fdestroy) &arg_destroy);
        if (rs) {
                for (rid = store->table_api.subrids_next(rs); !is_oid_nil(rid); 
rid = store->table_api.subrids_next(rs)) {
                        sql_arg *a = load_arg(tr, t, rid);
@@ -921,7 +930,7 @@ load_func(sql_trans *tr, sql_schema *s, 
                                return NULL;
                        if (a->inout == ARG_OUT) {
                                if (!t->res)
-                                       t->res = SA_LIST(tr->sa, (fdestroy) 
NULL);
+                                       t->res = list_new(tr->sa, (fdestroy) 
&arg_destroy);
                                list_append(t->res, a);
                        } else {
                                list_append(t->ops, a);
@@ -1684,9 +1693,9 @@ store_load(sqlstore *store, sql_allocato
        if (!sequences_init())
                return NULL;
        tr = sql_trans_create(store, NULL, NULL);
-       tr->store = store;
        if (!tr)
                return NULL;
+       tr->store = store;
 
        /* for now use malloc and free */
        store->active = list_create(NULL);
@@ -1695,7 +1704,6 @@ store_load(sqlstore *store, sql_allocato
                /* cannot initialize database in readonly mode */
                if (store->readonly)
                        return NULL;
-               tr = sql_trans_create(store, NULL, NULL);
                if (!tr) {
                        TRC_CRITICAL(SQL_STORE, "Failed to start a transaction 
while loading the storage\n");
                        return NULL;
@@ -1899,6 +1907,7 @@ store_load(sqlstore *store, sql_allocato
        if (store->logger_api.log_needs_update(store))
                if (store_upgrade_ids(tr) != SQL_OK)
                        TRC_CRITICAL(SQL_STORE, "Cannot commit upgrade 
transaction\n");
+       sql_trans_destroy(tr);
        store->initialized = 1;
        return store;
 }
@@ -2119,8 +2128,9 @@ store_exit(sqlstore *store)
        }
 
        if (store->cat) {
-               /* todo add catalog destroy */
                MT_lock_unset(&store->lock);
+               os_destroy(store->cat->objects, store);
+               os_destroy(store->cat->schemas, store);
                sequences_exit();
                MT_lock_set(&store->lock);
        }
@@ -2131,6 +2141,7 @@ store_exit(sqlstore *store)
        TRC_DEBUG(SQL_STORE, "Store unlocked\n");
        MT_lock_unset(&store->lock);
        sa_destroy(sa);
+       _DELETE(store);
 }
 
 /* call locked! */
@@ -3403,8 +3414,10 @@ sql_trans_destroy(sql_trans *tr)
        sql_trans *res = tr->parent;
 
        TRC_DEBUG(SQL_STORE, "Destroy transaction: %p\n", tr);
-       if (tr->name)
+       if (tr->name) {
+               _DELETE(tr->name);
                tr->name = NULL;
+       }
        if (tr->changes)
                sql_trans_rollback(tr);
        _DELETE(tr);
@@ -4173,13 +4186,13 @@ sql_trans_create_func(sql_trans *tr, sql
        se = t->side_effect = (type==F_FILT || (res && (lang==FUNC_LANG_SQL || 
!list_empty(args))))?FALSE:TRUE;
        t->varres = varres;
        t->vararg = vararg;
-       t->ops = SA_LIST(tr->sa, (fdestroy) NULL);
+       t->ops = SA_LIST(tr->sa, (fdestroy) &arg_destroy);
        t->fix_scale = SCALE_EQ;
        t->system = system;
        for (n=args->h; n; n = n->next)
                list_append(t->ops, arg_dup(tr, s, n->data));
        if (res) {
-               t->res = SA_LIST(tr->sa, (fdestroy) NULL);
+               t->res = SA_LIST(tr->sa, (fdestroy) &arg_destroy);
                for (n=res->h; n; n = n->next)
                        list_append(t->res, arg_dup(tr, s, n->data));
        }
@@ -5937,7 +5950,7 @@ sql_session_create(sqlstore *store, sql_
        if (store->singleuser > 1)
                return NULL;
 
-       s = SA_ZNEW(sa, sql_session);
+       s = SA_ZNEW(/*sa*/NULL, sql_session);
        if (!s)
                return NULL;
        s->sa = sa;
@@ -5966,6 +5979,7 @@ sql_session_destroy(sql_session *s)
        assert(!s->tr || s->tr->active == 0);
        if (s->tr)
                sql_trans_destroy(s->tr);
+       _DELETE(s);
 }
 
 int
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to