Changeset: 45aa5cb0dc09 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/45aa5cb0dc09
Modified Files:
sql/storage/store.c
Branch: iso
Log Message:
Use the right pointer and cleanup
diffs (145 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1681,13 +1681,13 @@ bootstrap_create_schema(sql_trans *tr, c
/* TODO clean this */
static inline int
-id_hash(sqlid *id)
-{
- return (int) BATatoms[TYPE_int].atomHash(id);
+dep_hash(sql_dependency_change *dep)
+{
+ return (int) BATatoms[TYPE_int].atomHash(&dep->objid);
}
static void
-id_hash_clear(sql_hash *h)
+dep_hash_clear(sql_hash *h)
{
if (h == NULL || h->sa || h->entries == 0)
return;
@@ -1707,7 +1707,7 @@ id_hash_clear(sql_hash *h)
}
static void
-id_hash_destroy(sql_hash *h)
+dep_hash_destroy(sql_hash *h)
{
if (h == NULL || h->sa)
return;
@@ -1757,8 +1757,8 @@ store_load(sqlstore *store, sql_allocato
/* for now use malloc and free */
store->active = list_create(NULL);
- store->dependencies = hash_new(NULL, 1024, (fkeyvalue)&id_hash);
- store->depchanges = hash_new(NULL, 1024, (fkeyvalue)&id_hash);
+ store->dependencies = hash_new(NULL, 1024, (fkeyvalue)&dep_hash);
+ store->depchanges = hash_new(NULL, 1024, (fkeyvalue)&dep_hash);
if (store->first) {
/* cannot initialize database in readonly mode */
@@ -2134,8 +2134,8 @@ store_exit(sqlstore *store)
store->logger_api.destroy(store);
list_destroy(store->active);
- id_hash_destroy(store->dependencies);
- id_hash_destroy(store->depchanges);
+ dep_hash_destroy(store->dependencies);
+ dep_hash_destroy(store->depchanges);
TRC_DEBUG(SQL_STORE, "Store unlocked\n");
MT_lock_unset(&store->flush);
@@ -2250,8 +2250,8 @@ store_manager(sqlstore *store)
if (ATOMIC_GET(&store->nr_active) == 0) {
ulng oldest = store_timestamp(store)+1;
- id_hash_clear(store->dependencies);
- id_hash_clear(store->depchanges);
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
store_pending_changes(store, oldest);
}
store_unlock(store);
@@ -3495,8 +3495,8 @@ sql_trans_rollback(sql_trans *tr)
c->ts = commit_ts;
}
if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- id_hash_clear(store->dependencies);
- id_hash_clear(store->depchanges);
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
}
store_pending_changes(store, oldest);
for(node *n=nl->h; n; n = n->next) {
@@ -3519,8 +3519,8 @@ sql_trans_rollback(sql_trans *tr)
MT_lock_set(&store->commit);
store_lock(store);
if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- id_hash_clear(store->dependencies);
- id_hash_clear(store->depchanges);
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
}
ulng oldest = store_timestamp(store);
store_pending_changes(store, oldest);
@@ -3682,7 +3682,6 @@ sql_trans_valid(sql_trans *tr)
static inline int
transaction_add_hash_entry(sql_hash *h, sqlid id, sql_dependency_change_type
tpe, ulng ts)
{
- int key = h->key(&id);
sql_dependency_change *next_change = MNEW(sql_dependency_change);
if (!next_change)
@@ -3693,7 +3692,10 @@ transaction_add_hash_entry(sql_hash *h,
.ts = ts
};
- hash_add(h, key, next_change);
+ if (!hash_add(h, h->key(next_change), next_change)) {
+ _DELETE(next_change);
+ return LOG_ERR;
+ }
return LOG_OK;
}
@@ -3707,7 +3709,7 @@ transaction_check_dependencies_and_remov
if (!list_empty(tr->dependencies) && !hash_empty(store->depchanges)) {
for (node *n = tr->dependencies->h; n && ok == LOG_OK; n =
n->next) {
sql_dependency_change *lchange =
(sql_dependency_change*) n->data;
- int key = store->depchanges->key(&lchange->objid);
+ int key = store->depchanges->key(lchange);
sql_hash_e *he =
store->depchanges->buckets[key&(store->depchanges->size-1)];
for (; he && ok == LOG_OK; he = he->chain) {
@@ -3721,7 +3723,7 @@ transaction_check_dependencies_and_remov
if (ok == LOG_OK && !list_empty(tr->depchanges) &&
!hash_empty(store->dependencies)) {
for (node *n = tr->depchanges->h; n && ok == LOG_OK; n =
n->next) {
sql_dependency_change *lchange =
(sql_dependency_change*) n->data;
- int key = store->dependencies->key(&lchange->objid);
+ int key = store->dependencies->key(lchange);
sql_hash_e *he =
store->dependencies->buckets[key&(store->dependencies->size-1)];
for (; he && ok == LOG_OK; he = he->chain) {
@@ -3812,8 +3814,8 @@ sql_trans_commit(sql_trans *tr)
TRC_DEBUG(SQL_STORE, "Forwarding changes (" ULLFMT ", " ULLFMT
") -> " ULLFMT "\n", tr->tid, tr->ts, commit_ts);
/* apply committed changes */
if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- id_hash_clear(store->dependencies);
- id_hash_clear(store->depchanges);
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
oldest = commit_ts;
}
store_pending_changes(store, oldest);
@@ -3858,8 +3860,8 @@ sql_trans_commit(sql_trans *tr)
MT_lock_set(&store->commit);
store_lock(store);
if (ATOMIC_GET(&store->nr_active) == 1 && !tr->parent) {
- id_hash_clear(store->dependencies);
- id_hash_clear(store->depchanges);
+ dep_hash_clear(store->dependencies);
+ dep_hash_clear(store->depchanges);
}
ulng oldest = store_timestamp(store);
store_pending_changes(store, oldest);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list