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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list