Changeset: 68aa1effbbe0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/68aa1effbbe0
Modified Files:
        gdk/gdk.h
        sql/storage/bat/bat_storage.c
Branch: Jul2021
Log Message:

bat_iterator is for read-only access only.


diffs (51 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -888,6 +888,8 @@ gdk_export void HEAPincref(Heap *h);
  * accesses, it is better to use the iterator, even without the BUNt*
  * macros, since the theaplock is only held very briefly.
  *
+ * Note, bat_iterator must only be used for read-only access.
+ *
  * If BATs are to be modified, higher level code must assure that no
  * other thread is going to modify the same BAT at the same time.  A
  * to-be-modified BAT should not use bat_iterator.  It can use
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
@@ -320,9 +320,6 @@ segments2cs(sql_trans *tr, segments *seg
                return LOG_ERR;
        }
 
-       if (nr > BATcount(b))
-               BATsetcount(b, nr);
-
        /* disable all properties here */
        b->tsorted = false;
        b->trevsorted = false;
@@ -334,13 +331,12 @@ segments2cs(sql_trans *tr, segments *seg
        b->tnokey[1] = 0;
 
        uint32_t *restrict dst;
-       BATiter bi = bat_iterator(b);
        for (; s ; s=s->next) {
                if (s->ts == tr->tid && s->end != s->start) {
                        b->batDirtydesc = true;
                        size_t lnr = s->end-s->start;
                        size_t pos = s->start;
-                       dst = ((uint32_t*)bi.base) + (s->start/32);
+                       dst = (uint32_t *) Tloc(b, 0) + (s->start/32);
                        uint32_t cur = 0;
                        if (s->deleted) {
                                size_t used = pos&31, end = 32;
@@ -385,7 +381,9 @@ segments2cs(sql_trans *tr, segments *seg
                        }
                }
        }
-       bat_iterator_end(&bi);
+       if (nr > BATcount(b))
+               BATsetcount(b, nr);
+
        bat_destroy(b);
        return LOG_OK;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to