Changeset: 697ae64b5a1c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=697ae64b5a1c
Modified Files:
        sql/backends/monet5/sql_optimizer.c
        sql/storage/bat/bat_storage.c
Branch: Jun2020
Log Message:

add lock's around early (sql_optimizer) access to table information


diffs (67 lines):

diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -30,6 +30,7 @@ SQLgetColumnSize(sql_trans *tr, sql_colu
 {
        lng size = 0;
        BAT *b;
+       store_lock();
        switch(access){
        case 0:
                b= store_funcs.bind_col(tr, c, RDONLY);
@@ -57,6 +58,7 @@ SQLgetColumnSize(sql_trans *tr, sql_colu
                        BBPunfix(b->batCacheid);
                }
        }
+       store_unlock();
        return size;
 }
 
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
@@ -1891,8 +1891,11 @@ delayed_destroy_dbat(sql_dbat *b)
        if (!n)
                return LOG_OK;
        MT_lock_set(&destroy_lock);
-       while(n->next)
+       assert(n->r.refcnt == 1);
+       while(n->next) {
+               assert(n->r.refcnt == 1);
                n = n->next;
+       }
        n->next = tobe_destroyed_dbat;
        tobe_destroyed_dbat = b;
        MT_lock_unset(&destroy_lock);
@@ -2677,6 +2680,7 @@ update_table(sql_trans *tr, sql_table *f
                        if (!tt->data)
                                tt->base.allocated = ft->base.allocated;
                        ft->data = NULL;
+                       assert(!b->next);
                        b->next = tt->data;
                        tt->data = b;
 
@@ -2730,6 +2734,7 @@ update_table(sql_trans *tr, sql_table *f
                                if (!oc->data)
                                        oc->base.allocated = cc->base.allocated;
                                cc->data = NULL;
+                               assert(!b->next);
                                b->next = oc->data;
                                oc->data = b;
                                tr_handle_snapshot(tr, b);
@@ -2818,6 +2823,7 @@ update_table(sql_trans *tr, sql_table *f
                                        if (!oi->data)
                                                oi->base.allocated = 
ci->base.allocated;
                                        ci->data = NULL;
+                                       assert(!b->next);
                                        b->next = oi->data;
                                        oi->data = b;
                                        tr_handle_snapshot(tr, b);
@@ -2872,6 +2878,7 @@ update_table(sql_trans *tr, sql_table *f
        if (ft->data)
                destroy_del(tr, ft);
        ft->base.allocated = 0;
+       ft->data = NULL;
        return ok;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to