Changeset: 89b3a8dd61a9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=89b3a8dd61a9
Modified Files:
        monetdb5/optimizer/opt_dataflow.c
Branch: Jul2017
Log Message:

Properly administer and use R/W tags
An erroneous SQL test uncovered potential garbage collection
issues in a parallel block.


diffs (50 lines):

diff --git a/monetdb5/optimizer/opt_dataflow.c 
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -46,7 +46,7 @@
 
 typedef char *States;
 
-#define setState(S,P,K,F)  ( assert(getArg(P,K) < vlimit), (S)[getArg(P,K)] = 
F)
+#define setState(S,P,K,F)  ( assert(getArg(P,K) < vlimit), (S)[getArg(P,K)] |= 
F)
 #define getState(S,P,K)  ((S)[getArg(P,K)])
 
 static int
@@ -126,7 +126,7 @@ dataflowBreakpoint(Client cntxt, MalBlkP
        }
 
        for(j=p->retc; j < p->argc; j++)
-               if ( getState(states,p,j) == VARBLOCK){
+               if ( getState(states,p,j) & VARBLOCK){
 #ifdef DEBUG_OPT_DATAFLOW
                        if( getState(states,p,j) & VARREAD)
                                fprintf(stderr,"#breakpoint on blocked var %s 
state %d\n", getVarName(mb,getArg(p,j)), getState(states,p,j));
@@ -236,7 +236,7 @@ OPTdataflowImplementation(Client cntxt, 
                                // collect BAT variables garbage collected 
within the block 
                                if( !simple)
                                        for( k=q->retc; k<q->argc; k++){
-                                               if (getState(states,q,k) == 
VAR2READ &&  getEndScope(mb,getArg(q,k)) == j  && 
isaBatType(getVarType(mb,getArg(q,k))) )
+                                               if (getState(states,q,k) & 
VAR2READ &&  getEndScope(mb,getArg(q,k)) == j && 
isaBatType(getVarType(mb,getArg(q,k))) )
                                                                top = 
dflowGarbagesink(cntxt, mb, getArg(q,k), sink, top);
                                        }
                        }
@@ -288,15 +288,15 @@ OPTdataflowImplementation(Client cntxt, 
                } 
                // remember you assigned/read variables
                for ( k = 0; k < p->retc; k++)
-                       setState(states,p,k,VARWRITE);
-               if( isUpdateInstruction(p) && (getState(states,p,1) == 0 || 
getState(states,p,1) == VARWRITE))
+                       setState(states,p,k, VARWRITE);
+               if( isUpdateInstruction(p) && (getState(states,p,1) == 0 || 
getState(states,p,1) & VARWRITE))
                        setState(states, p,1, VARBLOCK);
                for ( k = p->retc; k< p->argc; k++)
                if( !isVarConstant(mb,getArg(p,k)) ){
-                       if( getState(states, p, k) == VARREAD)
+                       if( getState(states, p, k) & VARREAD)
                                setState(states, p, k, VAR2READ);
                        else
-                       if( getState(states, p, k) == VARWRITE)
+                       if( getState(states, p, k) & VARWRITE)
                                setState(states, p ,k, VARREAD);
                }
 #ifdef DEBUG_OPT_DATAFLOW
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to