Changeset: 1ea2ebf36e34 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1ea2ebf36e34
Modified Files:
gdk/gdk_logger.c
Branch: Jul2021
Log Message:
merged
diffs (truncated from 1654 to 300 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -110,7 +110,7 @@ logger_unlock(logger *lg)
static bte
find_type(logger *lg, int tpe)
{
- BATiter cni = bat_iterator(lg->type_nr);
+ BATiter cni = bat_iterator_nolock(lg->type_nr);
bte *res = (bte*)Tloc(lg->type_id, 0);
BUN p;
@@ -119,19 +119,17 @@ find_type(logger *lg, int tpe)
MT_rwlock_rdlock(&cni.b->thashlock);
HASHloop_int(cni, cni.b->thash, p, &tpe) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
return res[p];
}
MT_rwlock_rdunlock(&cni.b->thashlock);
}
- bat_iterator_end(&cni);
return -1;
}
static int
find_type_nr(logger *lg, bte tpe)
{
- BATiter cni = bat_iterator(lg->type_id);
+ BATiter cni = bat_iterator_nolock(lg->type_id);
int *res = (int*)Tloc(lg->type_nr, 0);
BUN p;
@@ -140,12 +138,10 @@ find_type_nr(logger *lg, bte tpe)
MT_rwlock_rdlock(&cni.b->thashlock);
HASHloop_bte(cni, cni.b->thash, p, &tpe) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
return res[p];
}
MT_rwlock_rdunlock(&cni.b->thashlock);
}
- bat_iterator_end(&cni);
return -1;
}
@@ -157,18 +153,16 @@ log_find(BAT *b, BAT *d, int val)
assert(b->ttype == TYPE_int);
assert(d->ttype == TYPE_oid);
if (BAThash(b) == GDK_SUCCEED) {
- BATiter cni = bat_iterator(b);
+ BATiter cni = bat_iterator_nolock(b);
MT_rwlock_rdlock(&cni.b->thashlock);
HASHloop_int(cni, cni.b->thash, p, &val) {
oid pos = p;
if (BUNfnd(d, &pos) == BUN_NONE) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
return p;
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
} else { /* unlikely: BAThash failed */
BUN q;
int *t = (int *) Tloc(b, 0);
@@ -187,7 +181,7 @@ log_find(BAT *b, BAT *d, int val)
static log_bid
internal_find_bat(logger *lg, log_id id)
{
- BATiter cni = bat_iterator(lg->catalog_id);
+ BATiter cni = bat_iterator_nolock(lg->catalog_id);
BUN p;
if (BAThash(lg->catalog_id) == GDK_SUCCEED) {
@@ -196,13 +190,11 @@ internal_find_bat(logger *lg, log_id id)
oid pos = p;
if (BUNfnd(lg->dcatalog, &pos) == BUN_NONE) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
return *(log_bid *) Tloc(lg->catalog_bid, p);
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
}
- bat_iterator_end(&cni);
return 0;
}
@@ -548,7 +540,7 @@ log_read_updates(logger *lg, trans *tr,
static gdk_return
la_bat_update_count(logger *lg, log_id id, lng cnt)
{
- BATiter cni = bat_iterator(lg->catalog_id);
+ BATiter cni = bat_iterator_nolock(lg->catalog_id);
BUN p;
if (BAThash(lg->catalog_id) == GDK_SUCCEED) {
@@ -558,13 +550,11 @@ la_bat_update_count(logger *lg, log_id i
assert(lg->catalog_cnt->hseqbase == 0);
if (ocnt < cnt && BUNreplace(lg->catalog_cnt, p, &cnt,
false) != GDK_SUCCEED) {
MT_rwlock_rdunlock(&cni.b->thashlock);
- bat_iterator_end(&cni);
return GDK_FAIL;
}
}
MT_rwlock_rdunlock(&cni.b->thashlock);
}
- bat_iterator_end(&cni);
return GDK_SUCCEED;
}
@@ -2351,13 +2341,13 @@ internal_log_bat(logger *lg, BAT *b, log
offset = 0;
if (b->ttype == TYPE_msk) {
if (offset % 32 == 0) {
- if (!mnstr_writeIntArray(lg->output_log, Tloc(b, offset
/ 32), (size_t) ((nr + 31) / 32)))
+ if (!mnstr_writeIntArray(lg->output_log, (int *) ((char
*) bi.base + offset / 32), (size_t) ((nr + 31) / 32)))
ok = GDK_FAIL;
} else {
for (lng i = 0; i < nr; i += 32) {
uint32_t v = 0;
for (int j = 0; j < 32 && i + j < nr; j++)
- v |= (uint32_t) mskGetVal(b, (BUN)
(offset + i + j)) << j;
+ v |= (uint32_t) Tmskval(&bi, (BUN)
(offset + i + j)) << j;
if (!mnstr_writeInt(lg->output_log, (int) v)) {
ok = GDK_FAIL;
break;
@@ -2506,7 +2496,7 @@ log_delta(logger *lg, BAT *uid, BAT *uva
ok = wh(&id, lg->output_log, 1);
}
if (uval->ttype == TYPE_msk) {
- if (!mnstr_writeIntArray(lg->output_log, Tloc(uval, 0),
(BUNlast(uval) + 31) / 32))
+ if (!mnstr_writeIntArray(lg->output_log, vi.base,
(BUNlast(uval) + 31) / 32))
ok = GDK_FAIL;
} else {
for (p = 0; p < BUNlast(uid) && ok == GDK_SUCCEED; p++) {
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -226,7 +226,7 @@ BATorderidx(BAT *b, bool stable)
#define BINARY_MERGE(TYPE) \
do { \
- TYPE *v = (TYPE *) Tloc(b, 0); \
+ TYPE *v = (TYPE *) bi.base; \
if (p0 < q0 && p1 < q1) { \
if (v[*p0 - b->hseqbase] <= v[*p1 - b->hseqbase]) { \
*mv++ = *p0++; \
@@ -291,7 +291,7 @@ BATorderidx(BAT *b, bool stable)
#define NWAY_MERGE(TYPE) \
do { \
TYPE *minhp, t; \
- TYPE *v = (TYPE *) Tloc(b, 0); \
+ TYPE *v = (TYPE *) bi.base; \
if ((minhp = GDKmalloc(sizeof(TYPE)*n_ar)) == NULL) { \
goto bailout; \
} \
@@ -359,9 +359,11 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
return GDK_FAIL;
}
TRC_DEBUG(ACCELERATOR, "GDKmergeidx(" ALGOBATFMT ") create index\n",
ALGOBATPAR(b));
+ BATiter bi = bat_iterator(b);
MT_lock_set(&b->batIdxLock);
if (b->torderidx) {
MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
return GDK_SUCCEED;
}
if ((m = GDKzalloc(sizeof(Heap))) == NULL ||
@@ -371,6 +373,7 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
HEAPalloc(m, BATcount(b) + ORDERIDXOFF, SIZEOF_OID, 0) !=
GDK_SUCCEED) {
GDKfree(m);
MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
return GDK_FAIL;
}
m->free = (BATcount(b) + ORDERIDXOFF) * SIZEOF_OID;
@@ -426,6 +429,7 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
HEAPfree(m, true);
GDKfree(m);
MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
return GDK_FAIL;
}
@@ -442,6 +446,7 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
HEAPfree(m, true);
GDKfree(m);
MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
return GDK_FAIL;
}
for (i = 0; i < n_ar; i++) {
@@ -491,6 +496,7 @@ GDKmergeidx(BAT *b, BAT**a, int n_ar)
b->batDirtydesc = true;
MT_lock_unset(&b->batIdxLock);
+ bat_iterator_end(&bi);
return GDK_SUCCEED;
}
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -22,7 +22,8 @@
#define project1_loop(TYPE) \
static gdk_return \
-project1_##TYPE(BAT *restrict bn, BAT *restrict l, BAT *restrict r1) \
+project1_##TYPE(BAT *restrict bn, BAT *restrict l, BAT *restrict r1, \
+ BATiter *restrict r1i)
\
{ \
BUN lo, hi; \
const TYPE *restrict r1t; \
@@ -30,7 +31,7 @@ project1_##TYPE(BAT *restrict bn, BAT *r
oid r1seq, r1end; \
\
MT_thread_setalgorithm(__func__); \
- r1t = (const TYPE *) Tloc(r1, 0); \
+ r1t = (const TYPE *) r1i->base; \
bt = (TYPE *) Tloc(bn, 0); \
r1seq = r1->hseqbase; \
r1end = r1seq + BATcount(r1); \
@@ -45,16 +46,19 @@ project1_##TYPE(BAT *restrict bn, BAT *r
for (lo = 0, hi = BATcount(l); lo < hi; lo++) \
bt[lo] = r1t[lo]; \
} else { \
- assert(l->ttype);\
- const oid *restrict ot = (const oid *) Tloc(l, 0); \
+ assert(l->ttype); \
+ BATiter li = bat_iterator(l); \
+ const oid *restrict ot = (const oid *) li.base; \
for (lo = 0, hi = BATcount(l); lo < hi; lo++) { \
oid o = ot[lo]; \
if (o < r1seq || o >= r1end) { \
GDKerror("does not match always\n"); \
+ bat_iterator_end(&li); \
return GDK_FAIL; \
} \
bt[lo] = r1t[o - r1seq]; \
} \
+ bat_iterator_end(&li); \
} \
BATsetcount(bn, lo); \
return GDK_SUCCEED; \
@@ -76,7 +80,8 @@ project1_loop(uuid)
static gdk_return \
project_##TYPE(BAT *restrict bn, BAT *restrict l, \
struct canditer *restrict ci, \
- BAT *restrict r1, BAT *restrict r2) \
+ BAT *restrict r1, BAT *restrict r2, \
+ BATiter *restrict r1i, BATiter *restrict r2i) \
{ \
BUN lo, hi; \
const TYPE *restrict r1t; \
@@ -89,10 +94,10 @@ project_##TYPE(BAT *restrict bn, BAT *re
if (r2 == NULL && \
(!ci || (ci->tpe == cand_dense && BATtdense(l))) && \
l->tnonil && r1->ttype && !BATtdense(r1)) \
- return project1_##TYPE(bn, l, r1); \
+ return project1_##TYPE(bn, l, r1, r1i); \
MT_thread_setalgorithm(__func__); \
- r1t = (const TYPE *) Tloc(r1, 0); \
- r2t = r2 ? (const TYPE *) Tloc(r2, 0) : NULL; \
+ r1t = (const TYPE *) r1i->base; \
+ r2t = (const TYPE *) r2i->base; /* may be NULL if r2 == NULL */ \
bt = (TYPE *) Tloc(bn, 0); \
r1seq = r1->hseqbase; \
r1end = r1seq + BATcount(r1); \
@@ -129,7 +134,8 @@ project_##TYPE(BAT *restrict bn, BAT *re
bt[lo] = v; \
} \
} else { \
- const oid *restrict ot = (const oid *) Tloc(l, 0); \
+ BATiter li = bat_iterator(l); \
+ const oid *restrict ot = (const oid *) li.base; \
for (lo = 0, hi = BATcount(l); lo < hi; lo++) { \
oid o = ot[lo]; \
if (is_oid_nil(o)) { \
@@ -137,6 +143,7 @@ project_##TYPE(BAT *restrict bn, BAT *re
bn->tnil = true; \
} else if (o < r1seq || o >= r2end) { \
GDKerror("does not match always\n"); \
+ bat_iterator_end(&li); \
return GDK_FAIL; \
} else if (o < r1end) { \
v = r1t[o - r1seq]; \
@@ -146,6 +153,7 @@ project_##TYPE(BAT *restrict bn, BAT *re
bt[lo] = v; \
} \
} \
+ bat_iterator_end(&li); \
} \
BATsetcount(bn, lo); \
return GDK_SUCCEED; \
@@ -166,7 +174,8 @@ project_loop(uuid)
static gdk_return
project_oid(BAT *restrict bn, BAT *restrict l, struct canditer *restrict lci,
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list