Changeset: 1f2250fc559d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1f2250fc559d
Modified Files:
        sql/storage/objectset.c
        sql/storage/store.c
Branch: nospare
Log Message:

unlock outside branch


diffs (54 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -422,8 +422,8 @@ os_add(objectset *os, struct sql_trans *
                if (oo)
                        oo->newer = ov;
                n->data = ov;
+               MT_lock_unset(&os->ht_lock);
                if (!os->temporary)
-               MT_lock_unset(&os->ht_lock);
                        trans_add(tr, b, ov, &tc_gc_objectversion, 
&tc_commit_objectversion);
                return 0;
        } else { /* new */
@@ -464,9 +464,7 @@ os_del(objectset *os, struct sql_trans *
                if (oo)
                        oo->newer = ov;
                n->data = ov;
-               if (!os->temporary)
                MT_lock_unset(&os->ht_lock);
-
                if (!os->temporary)
                        trans_add(tr, b, ov, &tc_gc_objectversion, 
&tc_commit_objectversion);
                return 0;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -5139,6 +5139,13 @@ sql_trans_drop_key(sql_trans *tr, sql_sc
 {
        sql_base *b = os_find_id(s->keys, tr, id);
        sql_key *k = (sql_key*)b;
+       sql_table *t = k->t;
+
+       if (!inTransaction(tr, t)) {
+               t = new_table(tr, t);
+               os_add(t->s->tables, tr, t->base.name, &t->base);
+       }
+       k = (sql_key*)os_find_id(s->keys, tr, id); /* fetch updated key */
 
        if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) {
                sqlid *local_id = MNEW(sqlid);
@@ -5252,6 +5259,13 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
                return 0;
 
        sql_idx *i = (sql_idx*)b;
+       sql_table *t = i->t;
+       if (!inTransaction(tr, t)) {
+               t = new_table(tr, t);
+               os_add(t->s->tables, tr, t->base.name, &t->base);
+       }
+       i = (sql_idx*)os_find_id(s->idxs, tr, id); /* fetch updated idx */
+
        if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) {
                sqlid *local_id = MNEW(sqlid);
                if (!local_id) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to