Changeset: a8b289f8ab93 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a8b289f8ab93
Modified Files:
        monetdb5/mal/mal_interpreter.mx
        monetdb5/optimizer/Tests/All
        monetdb5/optimizer/Tests/dataflow.mal
        monetdb5/optimizer/Tests/dataflow4.mal
Branch: Aug2011
Log Message:

Concurrency issue in dataflow
When two thread are raising an error, they can fight
over a global variable. Solved with a lock.


diffs (64 lines):

diff --git a/monetdb5/mal/mal_interpreter.mx b/monetdb5/mal/mal_interpreter.mx
--- a/monetdb5/mal/mal_interpreter.mx
+++ b/monetdb5/mal/mal_interpreter.mx
@@ -2298,6 +2298,8 @@
        }
        /* assure correct variable type */
        if (getVarType(mb, exceptionVar) == TYPE_str) {
+               /* watch out for concurrent access */
+               mal_set_lock(mal_contextLock, "exception handler");
                v = &stk->stk[exceptionVar];
                if (v->val.sval)
                        FREE_EXCEPTION(v->val.sval);    /* old exception*/
@@ -2305,6 +2307,7 @@
                v->val.sval = ret;
                v->len = (int)strlen(v->val.sval);
                ret = 0;
+               mal_unset_lock(mal_contextLock, "exception handler");
        } else {
                mnstr_printf(cntxt->fdout, "%s", ret);
                FREE_EXCEPTION(ret);
diff --git a/monetdb5/optimizer/Tests/All b/monetdb5/optimizer/Tests/All
--- a/monetdb5/optimizer/Tests/All
+++ b/monetdb5/optimizer/Tests/All
@@ -106,7 +106,6 @@
 
 dataflow
 dataflow3
-dataflow4
 common
 common01
 garbage
diff --git a/monetdb5/optimizer/Tests/dataflow.mal 
b/monetdb5/optimizer/Tests/dataflow.mal
--- a/monetdb5/optimizer/Tests/dataflow.mal
+++ b/monetdb5/optimizer/Tests/dataflow.mal
@@ -29,6 +29,7 @@
        t8:= algebra.select(s,l,h);
        z:= mat.pack(t1,t2,t3,t4,t5,t6,t7,t8);
 exit go;
+mdb.var();
 c:= aggr.count(z);
 io.print(c);
 io.print("done");
diff --git a/monetdb5/optimizer/Tests/dataflow4.mal 
b/monetdb5/optimizer/Tests/dataflow4.mal
deleted file mode 100644
--- a/monetdb5/optimizer/Tests/dataflow4.mal
+++ /dev/null
@@ -1,17 +0,0 @@
-#map reduce development test.
-function user.s1_0{autoCommit=true}():void;
-    x := bat.new(nil:oid,nil:wrd);
-       bat.append(x,1:wrd);
-       bat.append(x,2:wrd);
-       d:= 0:wrd;
-       io.print(x);
-    z := aggr.sum(x);
-       io.print(z);
-barrier go:= language.dataflow();
-    x := algebra.markH(x);
-    d := aggr.sum(x);
-exit go;
-       io.print(x);
-       io.print(d);
-end s1_0;
-s1_0();
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to