Changeset: e594e03c9562 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e594e03c9562
Modified Files:
gdk/gdk_align.c
gdk/gdk_bat.c
gdk/gdk_batop.c
Branch: Jul2021
Log Message:
Avoid double work and add a few locks.
diffs (100 lines):
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -178,7 +178,6 @@ BATmaterialize(BAT *b)
cnt = BATcapacity(b);
if ((tail = GDKmalloc(sizeof(Heap))) == NULL)
return GDK_FAIL;
- *tail = *b->theap;
p = 0;
q = BUNlast(b);
assert(cnt >= q - p);
@@ -253,7 +252,6 @@ BATmaterialize(BAT *b)
HEAPdecref(b->theap, false);
b->theap = tail;
b->tbaseoff = 0;
- b->theap->dirty = true;
BATsetprop_nolock(b, GDK_NUNIQUE, TYPE_oid, &(oid){is_oid_nil(t) ? 1 :
b->batCount});
BATsetprop_nolock(b, GDK_UNIQUE_ESTIMATE, TYPE_dbl,
&(dbl){is_oid_nil(t) ? 1.0 : (dbl)b->batCount});
MT_lock_unset(&b->theaplock);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1644,9 +1644,11 @@ BUNinplacemulti(BAT *b, const oid *posit
b->tnonil = t && ATOMcmp(b->ttype, t,
ATOMnilptr(b->ttype)) != 0;
}
MT_rwlock_wrunlock(&b->thashlock);
+ MT_lock_set(&b->theaplock);
b->theap->dirty = true;
if (b->tvheap)
b->tvheap->dirty = true;
+ MT_lock_unset(&b->theaplock);
return GDK_SUCCEED;
}
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -332,7 +332,6 @@ insert_string_bat(BAT *b, BAT *n, struct
BATsetcount(b, oldcnt + ci->ncand);
bat_iterator_end(&ni);
assert(b->batCapacity >= b->batCount);
- b->theap->dirty = true;
/* maintain hash */
MT_rwlock_wrlock(&b->thashlock);
for (r = oldcnt, cnt = BATcount(b); b->thash && r < cnt; r++) {
@@ -405,7 +404,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
*dst++ = src[canditer_next(ci) - hseq];
}
}
- b->theap->dirty = true;
BATsetcount(b, BATcount(b) + ci->ncand);
/* maintain hash table */
MT_rwlock_wrlock(&b->thashlock);
@@ -462,7 +460,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
MT_rwlock_wrunlock(&b->thashlock);
BATsetcount(b, r);
bat_iterator_end(&ni);
- b->theap->dirty = true;
return GDK_SUCCEED;
}
@@ -884,7 +881,6 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool
}
MT_rwlock_wrunlock(&b->thashlock);
BATsetcount(b, b->batCount + ci.ncand);
- b->theap->dirty = true;
}
doreturn:
@@ -1134,9 +1130,7 @@ BATappend_or_update(BAT *b, BAT *p, cons
bool anynil = false;
bool locked = false;
- b->theap->dirty = true;
if (b->tvarsized) {
- b->tvheap->dirty = true;
for (BUN i = 0; i < ni.count; i++) {
oid updid;
if (positions) {
@@ -1297,6 +1291,9 @@ BATappend_or_update(BAT *b, BAT *p, cons
MT_rwlock_wrunlock(&b->thashlock);
locked = false;
}
+ MT_lock_set(&b->theaplock);
+ b->tvheap->dirty = true;
+ MT_lock_unset(&b->theaplock);
} else if (ATOMstorage(b->ttype) == TYPE_msk) {
HASHdestroy(b); /* hash doesn't make sense for msk */
for (BUN i = 0; i < ni.count; i++) {
@@ -1628,6 +1625,10 @@ BATappend_or_update(BAT *b, BAT *p, cons
}
}
bat_iterator_end(&ni);
+ MT_lock_set(&b->theaplock);
+ b->theap->dirty = true;
+ MT_lock_unset(&b->theaplock);
+
TRC_DEBUG(ALGO,
"BATreplace(" ALGOBATFMT "," ALGOOPTBATFMT "," ALGOBATFMT ")
" LLFMT " usec\n",
ALGOBATPAR(b), ALGOOPTBATPAR(p), ALGOBATPAR(n),
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list