Changeset: 395887ac6745 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=395887ac6745
Modified Files:
        monetdb5/mal/mal_runtime.c
        monetdb5/mal/mal_runtime.h
        monetdb5/optimizer/opt_statistics.c
        monetdb5/optimizer/opt_wrapper.c
Branch: default
Log Message:

Fix edit on runtimeProfile


diffs (106 lines):

diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -72,31 +72,31 @@ runtimeProfileInit(Client cntxt, MalBlkP
                MT_lock_unset(&mal_delayLock);
                return;
        }
+       // check for recursive call
        for( i = 0; i < qtop; i++)
-               if ( QRYqueue[i].mb == mb)
-                       break;
+               if ( QRYqueue[i].mb == mb &&  stk->up == QRYqueue[i].stk){
+                       QRYqueue[i].stk = stk;
+                       stk->tag = QRYqueue[i].tag;
+                       MT_lock_unset(&mal_delayLock);
+                       return;
+               }
 
-       stk->tag = calltag++;
-       if ( i == qtop ) {
-               mb->tag = qtag;
-               QRYqueue[i].mb = mb;    // for detecting duplicates
-               QRYqueue[i].stk = stk;  // for status pause 'p'/running '0'/ 
quiting 'q'
-               QRYqueue[i].tag = qtag++;
-               QRYqueue[i].start = (lng)time(0);
-               QRYqueue[i].runtime = mb->runtime;
-               q = isaSQLquery(mb);
-               QRYqueue[i].query = q? GDKstrdup(q):0;
-               QRYqueue[i].status = "running";
-               QRYqueue[i].cntxt = cntxt;
-       }
-
+       // add new invokation
+       QRYqueue[i].mb = mb;    
+       QRYqueue[i].tag = qtag++;
+       QRYqueue[i].stk = stk;                          // for status pause 
'p'/running '0'/ quiting 'q'
+       QRYqueue[i].start = (lng)time(0);
+       QRYqueue[i].runtime = mb->runtime;      // the estimated execution time
+       q = isaSQLquery(mb);
+       QRYqueue[i].query = q? GDKstrdup(q):0;
+       QRYqueue[i].status = "running";
+       QRYqueue[i].cntxt = cntxt;
        qtop += i == qtop;
-
        MT_lock_unset(&mal_delayLock);
 }
 
 void
-runtimeProfileFinish(Client cntxt, MalBlkPtr mb)
+runtimeProfileFinish(Client cntxt, MalBlkPtr mb, MalStkPtr stk)
 {
        int i,j;
 
@@ -104,9 +104,15 @@ runtimeProfileFinish(Client cntxt, MalBl
 
        MT_lock_set(&mal_delayLock);
        for( i=j=0; i< qtop; i++)
-       if ( QRYqueue[i].mb != mb)
+       if ( QRYqueue[i].stk != stk)
                QRYqueue[j++] = QRYqueue[i];
        else  {
+               if( stk->up){
+                       // recursive call
+                       QRYqueue[i].stk = stk->up;
+                       MT_lock_unset(&mal_delayLock);
+                       return;
+               }
                QRYqueue[i].mb->calls++;
                QRYqueue[i].mb->runtime += (lng) (((lng)time(0) - 
QRYqueue[i].start) * 1000.0/QRYqueue[i].mb->calls);
 
diff --git a/monetdb5/mal/mal_runtime.h b/monetdb5/mal/mal_runtime.h
--- a/monetdb5/mal/mal_runtime.h
+++ b/monetdb5/mal/mal_runtime.h
@@ -36,7 +36,7 @@ typedef struct QRYQUEUE{
 } *QueryQueue;
 
 mal_export void runtimeProfileInit(Client cntxt, MalBlkPtr mb, MalStkPtr stk);
-mal_export void runtimeProfileFinish(Client cntxt, MalBlkPtr mb);
+mal_export void runtimeProfileFinish(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk);
 mal_export void runtimeProfileBegin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci, RuntimeProfile prof);
 mal_export void runtimeProfileExit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci, RuntimeProfile prof);
 mal_export void finishSessionProfiler(Client cntxt);
diff --git a/monetdb5/optimizer/opt_statistics.c 
b/monetdb5/optimizer/opt_statistics.c
--- a/monetdb5/optimizer/opt_statistics.c
+++ b/monetdb5/optimizer/opt_statistics.c
@@ -9,7 +9,6 @@
 #include "monetdb_config.h"
 #include "opt_statistics.h"
 /*
- * @
  * Upon loading the module it should inspect the scenario table
  * for any unresolved references to the MALoptimizer and set the
  * callback function.
diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c
--- a/monetdb5/optimizer/opt_wrapper.c
+++ b/monetdb5/optimizer/opt_wrapper.c
@@ -110,6 +110,9 @@ str OPTwrapper (Client cntxt, MalBlkPtr 
 
        if( p == NULL)
                throw(MAL, "opt_wrapper", "missing optimizer statement");
+
+       if( mb->errors)
+               throw(MAL, "opt_wrapper", "MAL block contains errors");
        snprintf(optimizer,256,"%s", fcnnme = getFunctionId(p));
        
        curmodnme = getModuleId(p);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to