change to use new thread library

This commit is contained in:
rsc 2004-12-27 00:32:50 +00:00
parent 678ede7e54
commit 93f2ae0d92
3 changed files with 31 additions and 14 deletions

View file

@ -96,13 +96,6 @@ waitforio(void)
ulong type;
again:
alts[RPlumb].c = plumbc;
alts[RPlumb].v = &i;
alts[RPlumb].op = CHANRCV;
if((block & (1<<RPlumb)) || plumbc == nil)
alts[RPlumb].op = CHANNOP;
alts[RHost].c = hostc;
alts[RHost].v = &i;
alts[RHost].op = CHANRCV;
@ -121,12 +114,25 @@ again:
if(block & (1<<RMouse))
alts[RMouse].op = CHANNOP;
alts[RPlumb].c = plumbc;
alts[RPlumb].v = &i;
alts[RPlumb].op = CHANRCV;
if((block & (1<<RPlumb)) || plumbc == nil)
alts[RPlumb].op = CHANNOP;
alts[RResize].c = mousectl->resizec;
alts[RResize].v = nil;
alts[RResize].op = CHANRCV;
if(block & (1<<RResize))
alts[RResize].op = CHANNOP;
if(0) print("waitforio %c%c%c%c%c\n",
"h-"[alts[RHost].op == CHANNOP],
"k-"[alts[RKeyboard].op == CHANNOP],
"m-"[alts[RMouse].op == CHANNOP],
"p-"[alts[RPlumb].op == CHANNOP],
"R-"[alts[RResize].op == CHANNOP]);
alts[NRes].op = CHANEND;
if(got & ~block)
@ -135,6 +141,7 @@ again:
type = alt(alts);
switch(type){
case RHost:
if(0) print("hostalt recv %d %d\n", i, hostbuf[i].n);
hostp = hostbuf[i].data;
hoststop = hostbuf[i].data + hostbuf[i].n;
block = 0;

View file

@ -38,7 +38,9 @@ rcv(void)
static int i = 0;
static int errs = 0;
while((c=rcvchar()) != -1)
if(0) print("rcv in\n");
while((c=rcvchar()) != -1){
if(0) print(".");
switch(state){
case 0:
h.type = c;
@ -79,6 +81,10 @@ rcv(void)
}
break;
}
if(0) print(":");
}
if(0) print("rcv out\n");
}
Text *

View file

@ -112,11 +112,11 @@ extproc(void *argv)
c = arg[0];
fd = (int)arg[1];
threadfdnoblock(fd);
i = 0;
for(;;){
i = 1-i; /* toggle */
n = threadread(fd, plumbbuf[i].data, sizeof plumbbuf[i].data);
n = read(fd, plumbbuf[i].data, sizeof plumbbuf[i].data);
if(0) fprint(2, "ext %d\n", n);
if(n <= 0){
fprint(2, "samterm: extern read error: %r\n");
threadexits("extern"); /* not a fatal error */
@ -177,9 +177,10 @@ extstart(void)
}
plumbc = chancreate(sizeof(int), 0);
chansetname(plumbc, "plumbc");
arg[0] = plumbc;
arg[1] = (void*)fd;
threadcreate(extproc, arg, STACK);
proccreate(extproc, arg, STACK);
atexit(removeextern);
}
@ -255,6 +256,7 @@ plumbstart(void)
if(fid == nil)
return -1;
plumbc = chancreate(sizeof(int), 0);
chansetname(plumbc, "plumbc");
if(plumbc == nil){
fsclose(fid);
return -1;
@ -272,16 +274,17 @@ hostproc(void *arg)
c = arg;
i = 0;
threadfdnoblock(hostfd[0]);
for(;;){
i = 1-i; /* toggle */
n = threadread(hostfd[0], hostbuf[i].data, sizeof hostbuf[i].data);
n = read(hostfd[0], hostbuf[i].data, sizeof hostbuf[i].data);
if(0) fprint(2, "hostproc %d\n", n);
if(n <= 0){
fprint(2, "samterm: host read error: %r\n");
threadexitsall("host");
}
hostbuf[i].n = n;
which = i;
if(0) fprint(2, "hostproc send %d\n", which);
send(c, &which);
}
}
@ -290,5 +293,6 @@ void
hoststart(void)
{
hostc = chancreate(sizeof(int), 0);
threadcreate(hostproc, hostc, STACK);
chansetname(hostc, "hostc");
proccreate(hostproc, hostc, STACK);
}