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