summaryrefslogtreecommitdiff
path: root/concurrency.c
diff options
context:
space:
mode:
authorglenda <glenda@9front>2022-10-22 19:03:56 +0000
committerglenda <glenda@9front>2022-10-22 19:03:56 +0000
commit79ab1a4223d53bbdbffc55ae7f9740d953c57945 (patch)
tree65104abcf220f4774ab2b84a0d772c891a9dff17 /concurrency.c
parent6a0d0638cdf510a9033fcd1e1a66daf636197a6f (diff)
Prepare for a namespace implementation at some point
Diffstat (limited to 'concurrency.c')
-rw-r--r--concurrency.c12
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++;