mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
Pipes cannot use SOCK_DGRAM. Back to SOCK_STREAM.
Add debugging to fdwait. Rewrite getcallerpc on PowerMac to be correct.
This commit is contained in:
parent
02a1a5c18b
commit
c91bd3283a
7 changed files with 27 additions and 18 deletions
|
@ -167,7 +167,7 @@ threadmain(int argc, char **argv)
|
|||
void
|
||||
mainproc(void *v)
|
||||
{
|
||||
int n;
|
||||
int n, nn;
|
||||
Fcall f;
|
||||
USED(v);
|
||||
|
||||
|
@ -186,8 +186,10 @@ mainproc(void *v)
|
|||
f.tag = NOTAG;
|
||||
n = convS2M(&f, vbuf, sizeof vbuf);
|
||||
if(verbose > 1) fprint(2, "* <- %F\n", &f);
|
||||
write(1, vbuf, n);
|
||||
n = read9pmsg(0, vbuf, sizeof vbuf);
|
||||
nn = write(1, vbuf, n);
|
||||
if(n != nn)
|
||||
sysfatal("error writing Tversion: %r\n");
|
||||
n = threadread9pmsg(0, vbuf, sizeof vbuf);
|
||||
if(convM2S(vbuf, n, &f) != n)
|
||||
sysfatal("convM2S failure");
|
||||
if(f.msize < msize)
|
||||
|
|
|
@ -63,8 +63,6 @@ threadmain(int argc, char *argv[])
|
|||
int ncol;
|
||||
Display *d;
|
||||
|
||||
extern int _threaddebuglevel;
|
||||
_threaddebuglevel = ~0;
|
||||
rfork(RFENVG|RFNAMEG);
|
||||
|
||||
ncol = -1;
|
||||
|
|
|
@ -127,7 +127,7 @@ popinput(void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
getc(void)
|
||||
{
|
||||
if(input == nil)
|
||||
|
|
7
src/lib9/getcallerpc-PowerMacintosh.c
Normal file
7
src/lib9/getcallerpc-PowerMacintosh.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
#include <lib9.h>
|
||||
|
||||
ulong
|
||||
getcallerpc(void *x)
|
||||
{
|
||||
return (((ulong*)(x))[-4]);
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
.text
|
||||
.globl _getcallerpc
|
||||
_getcallerpc:
|
||||
mflr r3
|
||||
blr
|
|
@ -6,5 +6,5 @@
|
|||
int
|
||||
p9pipe(int fd[2])
|
||||
{
|
||||
return socketpair(AF_UNIX, SOCK_DGRAM, 0, fd);
|
||||
return socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
|
||||
}
|
||||
|
|
|
@ -167,7 +167,7 @@ threadfdwaitsetup(void)
|
|||
}
|
||||
|
||||
void
|
||||
threadfdwait(int fd, int rw)
|
||||
_threadfdwait(int fd, int rw, ulong pc)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -192,10 +192,17 @@ threadfdwait(int fd, int rw)
|
|||
pfd[i].fd = fd;
|
||||
pfd[i].events = rw=='r' ? POLLIN : POLLOUT;
|
||||
polls[i].c = &s.c;
|
||||
//threadstate("fdwait %d %d", f->fd, e);
|
||||
//fprint(2, "%s [%3d] fdwait %d %c list *0x%lux\n",
|
||||
argv0, threadid(), fd, rw, pc);
|
||||
recvul(&s.c);
|
||||
}
|
||||
|
||||
void
|
||||
threadfdwait(int fd, int rw)
|
||||
{
|
||||
_threadfdwait(fd, rw, getcallerpc(&fd));
|
||||
}
|
||||
|
||||
void
|
||||
threadsleep(int ms)
|
||||
{
|
||||
|
@ -230,7 +237,7 @@ again:
|
|||
if(errno == EINTR)
|
||||
goto again;
|
||||
if(errno == EAGAIN || errno == EWOULDBLOCK){
|
||||
threadfdwait(fd, 'r');
|
||||
_threadfdwait(fd, 'r', getcallerpc(&fd));
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
@ -249,7 +256,7 @@ again:
|
|||
if(errno == EINTR)
|
||||
goto again;
|
||||
if(errno == EAGAIN || errno == EWOULDBLOCK){
|
||||
threadfdwait(fd, 'r');
|
||||
_threadfdwait(fd, 'r', getcallerpc(&fd));
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
@ -268,7 +275,7 @@ again:
|
|||
if(errno == EINTR)
|
||||
goto again;
|
||||
if(errno == EAGAIN || errno == EWOULDBLOCK){
|
||||
threadfdwait(fd, 'w');
|
||||
_threadfdwait(fd, 'w', getcallerpc(&fd));
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
@ -303,7 +310,7 @@ again:
|
|||
if(errno == EINTR)
|
||||
goto again;
|
||||
if(errno == EAGAIN || errno == EWOULDBLOCK){
|
||||
threadfdwait(fd, 'w');
|
||||
_threadfdwait(fd, 'w', getcallerpc(&fd));
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue