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

Reply via email to