Changeset: f2fad121b65e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f2fad121b65e
Modified Files:
gdk/gdk_bat.c
Branch: Jan2022
Log Message:
Save min/max pos when reinitializing bat iterator after resize.
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
@@ -1159,11 +1159,11 @@ BUNappendmulti(BAT *b, const void *value
const void *atomnil = ATOMnilptr(b->ttype);
const void *minvalp = NULL, *maxvalp = NULL;
BATiter bi = bat_iterator_nolock(b);
- if (bi.minpos != BUN_NONE)
- minvalp = BUNtail(bi, bi.minpos);
- if (bi.maxpos != BUN_NONE)
- maxvalp = BUNtail(bi, bi.maxpos);
if (b->tvarsized) {
+ if (bi.minpos != BUN_NONE)
+ minvalp = BUNtail(bi, bi.minpos);
+ if (bi.maxpos != BUN_NONE)
+ maxvalp = BUNtail(bi, bi.maxpos);
const void *vbase = b->tvheap->base;
for (BUN i = 0; i < count; i++) {
t = ((void **) values)[i];
@@ -1177,7 +1177,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);
@@ -1222,6 +1228,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 -- [email protected]
To unsubscribe send an email to [email protected]