Changeset: e1ffb973e73b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e1ffb973e73b Modified Files: MonetDB5/src/mal/mal_interpreter.mx Branch: default Log Message:
Merge head Prepare the dataflow for proper return to queue. diffs (32 lines): diff -r ddd6173a3338 -r e1ffb973e73b MonetDB5/src/mal/mal_interpreter.mx --- a/MonetDB5/src/mal/mal_interpreter.mx Sun Oct 24 10:00:14 2010 +0200 +++ b/MonetDB5/src/mal/mal_interpreter.mx Mon Oct 25 16:46:03 2010 +0200 @@ -576,6 +576,7 @@ #define DFLOWpending 0 /* runnable */ #define DFLOWrunning 1 /* currently in progress */ #define DFLOWwrapup 2 /* done! */ +#define DFLOWretry 3 /* reschedule */ typedef struct queue { int size; /* size of queue */ @@ -1051,6 +1052,7 @@ mnstr_printf(GDKout,"#DFLOWrequeue instr %d pool " LLFMT " claim "LLFMT"\n#", THRgettid(), memorypool, argclaim+retclaim); printInstruction(GDKstdout, mb, 0, pci, LIST_MAL_STMT | LIST_MAPI); } + /* actually should use DFLOWretry status */ throw(MAL,"DFLOWadmission","failed"); } } @@ -1346,6 +1348,12 @@ while(queued || todo != done){ PARDEBUG mnstr_printf(GDKstdout,"#waiting for results, queued %d todo %d done %d\n", queued,todo,done); f = q_dequeue(flow->done); + if ( f->status == DFLOWretry ){ + /* reschedule the instruction */ + f->status = DFLOWrunning; + q_requeue(flow->todo, f); + continue; + } if ( f->flow->stk->wrapup ) /* clean up whatever is called for */ (*f->flow->stk->wrapup)(f->flow->cntxt, f->flow->mb, f->flow->stk, getInstrPtr(flow->mb, abs(f->pc))); f->status = DFLOWwrapup; _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list