Changeset: 71025861879e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=71025861879e Modified Files: gdk/gdk.h gdk/gdk_cross.c gdk/gdk_join.c Branch: qcancel Log Message:
add cleanup callback handler diffs (140 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2115,19 +2115,29 @@ gdk_export BAT *BATsample_with_seed(BAT #define CHECK_QRY_TIMEOUT_STEP 10000 -#define GDK_CHECK_TIMEOUT(timeoffset, counter) \ +#define DEFAULT_TIMEOUT_HANDLER() \ + do { \ + GDKerror("Timeout was reached!"); \ + return GDK_FAIL; \ + } while(0) + +#define GOTO_LABEL_TIMEOUT_HANDLER(label) \ + do { \ + goto label; \ + } while(0) + +#define GDK_CHECK_TIMEOUT(timeoffset, counter, callback) \ do { \ if (timeoffset) { \ if (counter > CHECK_QRY_TIMEOUT_STEP) { \ if (GDKusec() > timeoffset) { \ - GDKerror("Timeout was reached!"); \ - return GDK_FAIL; \ + callback; \ } \ counter = 0; \ } else { \ counter++; \ } \ } \ - } while (false) + } while (0) #endif /* _GDK_H_ */ 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 for (i = 0; i < cnt1; i++) { oid x = canditer_next(&ci1); for (j = 0; j < cnt2; j++) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, DEFAULT_TIMEOUT_HANDLER()); *p++ = x; } } @@ -73,7 +73,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l counter = 0; for (i = 0; i < cnt1; i++) { for (j = 0; j < cnt2; j++) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, DEFAULT_TIMEOUT_HANDLER()); *p++ = canditer_next(&ci2); } canditer_reset(&ci2); diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -374,7 +374,8 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l, BUN p, q = BATcount(bn); do { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + DEFAULT_TIMEOUT_HANDLER()); for (p = 0; p < q; p++) { *o1p++ = o; } @@ -392,7 +393,8 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l, BUN p, q = BATcount(bn); do { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + DEFAULT_TIMEOUT_HANDLER()); for (p = 0; p < q; p++) { *o1p++ = o; } @@ -847,7 +849,8 @@ mergejoin_int(BAT **r1p, BAT **r2p, BAT /* from here on we don't have to worry about nil values */ while (lstart < lend && rstart < rend) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); v = rvals[rstart]; @@ -1151,7 +1154,8 @@ mergejoin_lng(BAT **r1p, BAT **r2p, BAT /* from here on we don't have to worry about nil values */ while (lstart < lend && rstart < rend) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); v = rvals[rstart]; if (lscan < lend - lstart && lvals[lstart + lscan] < v) { @@ -1453,7 +1457,8 @@ mergejoin_cand(BAT **r1p, BAT **r2p, BAT /* from here on we don't have to worry about nil values */ while (lstart < lend && rci.next < rci.ncand) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); v = canditer_peek(&rci); if (lvals) { @@ -1862,7 +1867,8 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l, * We will modify these as we go along. */ while (lci->next < lci->ncand) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); if (lscan == 0) { /* always search r completely */ assert(equal_order); @@ -2420,7 +2426,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l, TYPE *lvals = Tloc(l, 0); \ TYPE v; \ while (lci->next < lci->ncand) { \ - GDK_CHECK_TIMEOUT(timeoffset, counter); \ + GDK_CHECK_TIMEOUT(timeoffset, counter, GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \ lo = canditer_next(lci); \ v = lvals[lo - l->hseqbase]; \ nr = 0; \ @@ -2696,7 +2702,8 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B break; default: while (lci->next < lci->ncand) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); lo = canditer_next(lci); if (BATtvoid(l)) { if (BATtdense(l)) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list