mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
change to use new thread library
This commit is contained in:
parent
678ede7e54
commit
93f2ae0d92
3 changed files with 31 additions and 14 deletions
|
@ -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;
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue