Changeset: ac6fe95e3677 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ac6fe95e3677
Modified Files:
gdk/gdk_aggr.c
gdk/gdk_calc.c
gdk/gdk_cross.c
gdk/gdk_join.c
gdk/gdk_select.c
Branch: qcancel
Log Message:
Cleanup after timeout.
diffs (208 lines):
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3064,7 +3064,7 @@ BATcalcavg(BAT *b, BAT *s, dbl *avg, BUN
} \
} \
TIMEOUT_CHECK(timeoffset, \
- TIMEOUT_HANDLER(NULL)); \
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
} while (0)
/* calculate group counts with optional candidates list */
@@ -3205,6 +3205,10 @@ BATgroupcount(BAT *b, BAT *g, BAT *e, BA
ALGOOPTBATPAR(s), ALGOOPTBATPAR(bn),
ci.seq, ncand, GDKusec() - t0);
return bn;
+
+ bailout:
+ BBPreclaim(bn);
+ return NULL;
}
/* calculate group sizes (number of TRUE values) with optional
@@ -3605,6 +3609,10 @@ BATgroupminmax(BAT *b, BAT *g, BAT *e, B
nils = (*minmax)(oids, b, gids, ngrp, min, max, &ci, ncand,
BATcount(b), skip_nils, g && BATtdense(g));
+ if (nils == BUN_NONE) {
+ BBPreclaim(bn);
+ return NULL;
+ }
BATsetcount(bn, ngrp);
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -1122,7 +1122,7 @@ VARcalcsign(ValPtr ret, const ValRecord
x = canditer_next(&ci) - bhseqbase; \
dst[i] = (bit) (is_##TYPE##_nil(src[x]) ^ NOTNIL); \
} \
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(NULL)); \
+ TIMEOUT_CHECK(timeoffset, GOTO_LABEL_TIMEOUT_HANDLER(bailout));
\
} while (0)
static BAT *
@@ -1202,7 +1202,7 @@ BATcalcisnil_implementation(BAT *b, BAT
x = canditer_next(&ci) - bhseqbase;
dst[i] = (bit) (((*atomcmp)(BUNtail(bi, x), nil) == 0)
^ notnil);
}
- TIMEOUT_CHECK(timeoffset, TIMEOUT_HANDLER(NULL));
+ TIMEOUT_CHECK(timeoffset, GOTO_LABEL_TIMEOUT_HANDLER(bailout));
break;
}
}
@@ -1229,6 +1229,9 @@ BATcalcisnil_implementation(BAT *b, BAT
notnil ? "true" : "false", ALGOOPTBATPAR(bn), GDKusec() - t0);
return bn;
+ bailout:
+ BBPreclaim(bn);
+ return NULL;
}
BAT *
diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c
--- a/gdk/gdk_cross.c
+++ b/gdk/gdk_cross.c
@@ -56,7 +56,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
bn1->tnonil = true;
p = (oid *) Tloc(bn1, 0);
for (i = 0; i < cnt1; i++) {
- GDK_CHECK_TIMEOUT_BODY(timeoffset,
TIMEOUT_HANDLER(GDK_FAIL));
+ GDK_CHECK_TIMEOUT_BODY(timeoffset,
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
oid x = canditer_next(&ci1);
for (j = 0; j < cnt2; j++) {
*p++ = x;
@@ -73,7 +73,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
bn2->tnonil = true;
p = (oid *) Tloc(bn2, 0);
for (i = 0; i < cnt1; i++) {
- GDK_CHECK_TIMEOUT_BODY(timeoffset,
TIMEOUT_HANDLER(GDK_FAIL));
+ GDK_CHECK_TIMEOUT_BODY(timeoffset,
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
for (j = 0; j < cnt2; j++) {
*p++ = canditer_next(&ci2);
}
@@ -90,4 +90,9 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
else
TRC_DEBUG(ALGO, "BATsubcross()=(" ALGOBATFMT ")\n",
ALGOBATPAR(bn1));
return GDK_SUCCEED;
+
+ bailout:
+ BBPreclaim(bn1);
+ BBPreclaim(bn2);
+ return GDK_FAIL;
}
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -370,7 +370,7 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l,
do {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- TIMEOUT_HANDLER(GDK_FAIL));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
for (p = 0; p < q; p++) {
*o1p++ = o;
}
@@ -389,7 +389,7 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l,
do {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- TIMEOUT_HANDLER(GDK_FAIL));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
for (p = 0; p < q; p++) {
*o1p++ = o;
}
@@ -420,6 +420,11 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l,
GDKusec() - t0);
return GDK_SUCCEED;
+
+ bailout:
+ BBPreclaim(r1);
+ BBPreclaim(r2);
+ return GDK_FAIL;
}
#if SIZEOF_OID == SIZEOF_INT
@@ -725,7 +730,7 @@ mergejoin_void(BAT **r1p, BAT **r2p, BAT
}
}
TIMEOUT_CHECK(timeoffset,
- TIMEOUT_HANDLER(GDK_FAIL));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
} else {
TIMEOUT_LOOP(lci->ncand, timeoffset) {
oid c = canditer_next(lci);
@@ -741,7 +746,7 @@ mergejoin_void(BAT **r1p, BAT **r2p, BAT
}
}
TIMEOUT_CHECK(timeoffset,
- TIMEOUT_HANDLER(GDK_FAIL));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
}
r1->tsorted = true;
r1->trevsorted = BATcount(r1) <= 1;
@@ -776,6 +781,11 @@ mergejoin_void(BAT **r1p, BAT **r2p, BAT
GDKusec() - t0);
return GDK_SUCCEED;
+
+ bailout:
+ BBPreclaim(r1);
+ BBPreclaim(r2);
+ return GDK_FAIL;
}
/* Implementation of mergejoin (see below) for the special case that
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -151,7 +151,7 @@ hashselect(BAT *b, struct canditer *rest
if (ci->tpe != cand_dense) {
HASHloop_bound(bi, b->thash, i, tl, l, h) {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- GOTO_LABEL_TIMEOUT_HANDLER(bailout));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
o = (oid) (i + seq - d);
if (canditer_contains(ci, o)) {
buninsfix(bn, dst, cnt, o,
@@ -163,7 +163,7 @@ hashselect(BAT *b, struct canditer *rest
} else {
HASHloop_bound(bi, b->thash, i, tl, l, h) {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- GOTO_LABEL_TIMEOUT_HANDLER(bailout));
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
o = (oid) (i + seq - d);
buninsfix(bn, dst, cnt, o,
maximum - BATcapacity(bn),
@@ -270,7 +270,7 @@ hashselect(BAT *b, struct canditer *rest
for (i = 0, dcnt = 0, icnt = 0, p = 0; \
dcnt < imprints->dictcnt && i <= w - hseq + pr_off && p <
ci->ncand; \
dcnt++) { \
- GDK_CHECK_TIMEOUT(timeoffset, counter,
TIMEOUT_HANDLER(BUN_NONE)); \
+ GDK_CHECK_TIMEOUT(timeoffset, counter,
GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
limit = ((BUN) d[dcnt].cnt) << rpp; \
while (i + limit <= o - hseq + pr_off) { \
i += limit; \
@@ -408,7 +408,7 @@ hashselect(BAT *b, struct canditer *rest
buninsfix(bn, dst, cnt, o, \
(BUN) ((dbl) cnt / (dbl) (p
== 0 ? 1 : p) \
* (dbl) (ci->ncand-p)
* 1.1 + 1024), \
- maximum, BUN_NONE); \
+ maximum, BUN_NONE); \
cnt++; \
} \
} \
@@ -551,6 +551,9 @@ NAME##_##TYPE(BAT *b, struct canditer *r
choose(NAME, ISDENSE, v >= vl && v <= vh, TYPE); \
} \
return cnt; \
+ bailout: \
+ BBPreclaim(bn); \
+ return BUN_NONE; \
}
static BUN
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list