diff options
Diffstat (limited to 'concurrency.c')
-rw-r--r-- | concurrency.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/concurrency.c b/concurrency.c index 1c73099..415c39d 100644 --- a/concurrency.c +++ b/concurrency.c @@ -13,12 +13,13 @@ struct SpawnData Array *name; Array *left; Array *right; + Array *ns; QLock lock; Rendez done; }; static void newprocfn(SpawnData *); -static ThreadData *newthreaddata(Array *); +static ThreadData *newthreaddata(Array *, Array *); extern void **_privates; @@ -48,7 +49,7 @@ void initthreads(void) { Array *name = mkrunearray(L"main"); - _privates[0] = newthreaddata(name); + _privates[0] = newthreaddata(name, nil); freearray(name); } @@ -68,6 +69,7 @@ spawnthread(Function f, Array *name, Array *left, Array *right) exit proc */ + ThreadData *td = getthreaddata(); SpawnData *sp = emallocz(sizeof(SpawnData), 1); sp->func = dupfunction(f); @@ -75,6 +77,7 @@ spawnthread(Function f, Array *name, Array *left, Array *right) sp->name = duparray(name); sp->left = left ? duparray(left) : nil; sp->right = duparray(right); + sp->ns = fnSame(td->ns); sp->done.l = &sp->lock; qlock(&sp->lock); @@ -199,7 +202,7 @@ static void newprocfn(SpawnData *sp) { qlock(&sp->lock); - ThreadData *td = newthreaddata(sp->name); + ThreadData *td = newthreaddata(sp->name, sp->ns); _privates[0] = td; rwakeup(&sp->done); qunlock(&sp->lock); @@ -231,7 +234,7 @@ newprocfn(SpawnData *sp) } static ThreadData * -newthreaddata(Array *name) +newthreaddata(Array *name, Array *ns) { ThreadData *td = emallocz(sizeof(ThreadData), 1); td->id = getpid(); @@ -243,6 +246,7 @@ newthreaddata(Array *name) td->timedout = 0; td->newmail.l = &td->lock; td->name = fnSame(name); + td->ns = ns; lock(&threadlock); nthreads++; |