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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list