Changeset: 94bd4caf640c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=94bd4caf640c Modified Files: sql/storage/bat/bat_storage.c sql/storage/objectset.c Branch: nospare Log Message:
more leak fixes diffs (82 lines): 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 @@ -122,11 +122,18 @@ temp_dup_dbat(ulng tid) } static sql_dbat * +temp_dbat(sql_dbat *d, ulng tid) +{ + while (d && d->ts != tid) + d = d->next; + return d; +} + +static sql_dbat * get_dbat(sql_dbat *d, ulng tid, int is_temp) { if (is_temp) { - while (d && d->ts != tid) - d = d->next; + d = temp_dbat(d, tid); if (!d) return temp_dup_dbat(tid); } @@ -187,6 +194,22 @@ timestamp_dbat( sql_trans *tr, sql_dbat return d; } +static sql_dbat * +tab_timestamp_dbat( sql_trans *tr, sql_table *t) +{ + int is_temp = isTempTable(t); + if (is_temp) { + sql_dbat *d = temp_dbat(t->data, tr->tid); + if (!d) { + d = temp_dup_dbat(tr->tid); + d->next = t->data; + t->data = d; + } + return d; + } + return timestamp_dbat( tr, t->data, is_temp); +} + static sql_delta* delta_dup(sql_delta *d) { @@ -241,7 +264,7 @@ static BAT * bind_del(sql_trans *tr, sql_table *t, int access) { assert(access == QUICK || tr->active); - sql_dbat *d = timestamp_dbat(tr, t->data, isTempTable(t)); + sql_dbat *d = tab_timestamp_dbat(tr, t); return delta_bind_del(d, access); } @@ -1266,7 +1289,7 @@ count_del(sql_trans *tr, sql_table *t) assert(tr->active); if (!isTable(t)) return 0; - d = timestamp_dbat(tr, t->data, isTempTable(t)); + d = tab_timestamp_dbat(tr, t); assert(d); if (!d) return 0; diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -531,8 +531,12 @@ os_destroy(objectset *os, sql_store stor return; if (os->destroy) { for(versionhead *n=os->name_based_h; n; n=n->next) { + objectversion *ov = n->ov; /* TODO destroy objectversion */ - os->destroy(store, n->ov->b); + while(ov) { /* how about id based older ? */ + os->destroy(store, ov->b); + ov = ov->name_based_older; + } } } versionhead *n = os->name_based_h; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list