Changeset: 216484c0964a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/216484c0964a
Modified Files:
        gdk/gdk_bat.c
Branch: default
Log Message:

Merge with Jan2022 branch.


diffs (44 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1163,11 +1163,11 @@ BUNappendmulti(BAT *b, const void *value
                int (*atomcmp) (const void *, const void *) = 
ATOMcompare(b->ttype);
                const void *atomnil = ATOMnilptr(b->ttype);
                const void *minvalp = NULL, *maxvalp = NULL;
-               if (bi.minpos != BUN_NONE)
-                       minvalp = BUNtail(bi, bi.minpos);
-               if (bi.maxpos != BUN_NONE)
-                       maxvalp = BUNtail(bi, bi.maxpos);
                if (b->tvheap) {
+                       if (bi.minpos != BUN_NONE)
+                               minvalp = BUNtvar(bi, bi.minpos);
+                       if (bi.maxpos != BUN_NONE)
+                               maxvalp = BUNtvar(bi, bi.maxpos);
                        const void *vbase = b->tvheap->base;
                        for (BUN i = 0; i < count; i++) {
                                t = ((void **) values)[i];
@@ -1181,7 +1181,13 @@ BUNappendmulti(BAT *b, const void *value
                                         * updated (not if they were
                                         * initialized from t below, but
                                         * we don't know) */
+                                       BUN minpos = bi.minpos;
+                                       BUN maxpos = bi.maxpos;
+                                       MT_lock_set(&b->theaplock);
                                        bi = bat_iterator_nolock(b);
+                                       MT_lock_unset(&b->theaplock);
+                                       bi.minpos = minpos;
+                                       bi.maxpos = maxpos;
                                        vbase = b->tvheap->base;
                                        if (bi.minpos != BUN_NONE)
                                                minvalp = BUNtvar(bi, 
bi.minpos);
@@ -1226,6 +1232,10 @@ BUNappendmulti(BAT *b, const void *value
                                p++;
                        }
                } else {
+                       if (bi.minpos != BUN_NONE)
+                               minvalp = BUNtloc(bi, bi.minpos);
+                       if (bi.maxpos != BUN_NONE)
+                               maxvalp = BUNtloc(bi, bi.maxpos);
                        MT_rwlock_wrlock(&b->thashlock);
                        for (BUN i = 0; i < count; i++) {
                                t = (void *) ((char *) values + (i << 
b->tshift));
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to