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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list