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

View file

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

View file

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