tPipes cannot use SOCK_DGRAM. Back to SOCK_STREAM. Add debugging to fdwait. - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit c91bd3283a44946fd420ce68c43580aa0d327546 (DIR) parent 02a1a5c18bec9ca13fad2b7b12ae65c580f6fdf4 (HTM) Author: rsc <devnull@localhost> Date: Fri, 5 Mar 2004 02:25:41 +0000 Pipes cannot use SOCK_DGRAM. Back to SOCK_STREAM. Add debugging to fdwait. Rewrite getcallerpc on PowerMac to be correct. Diffstat: M src/cmd/9pserve.c | 8 +++++--- M src/cmd/acme/acme.c | 2 -- M src/cmd/plumb/rules.c | 2 +- A src/lib9/getcallerpc-PowerMacintos… | 7 +++++++ D src/lib9/getcallerpc-PowerMacintos… | 5 ----- M src/lib9/pipe.c | 2 +- M src/libthread/fdwait.c | 19 +++++++++++++------ 7 files changed, 27 insertions(+), 18 deletions(-) --- (DIR) diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c t@@ -167,7 +167,7 @@ threadmain(int argc, char **argv) void mainproc(void *v) { - int n; + int n, nn; Fcall f; USED(v); t@@ -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) (DIR) diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c t@@ -63,8 +63,6 @@ threadmain(int argc, char *argv[]) int ncol; Display *d; -extern int _threaddebuglevel; -_threaddebuglevel = ~0; rfork(RFENVG|RFNAMEG); ncol = -1; (DIR) diff --git a/src/cmd/plumb/rules.c b/src/cmd/plumb/rules.c t@@ -127,7 +127,7 @@ popinput(void) return 1; } -int +static int getc(void) { if(input == nil) (DIR) diff --git a/src/lib9/getcallerpc-PowerMacintosh.c b/src/lib9/getcallerpc-PowerMacintosh.c t@@ -0,0 +1,7 @@ +#include <lib9.h> + +ulong +getcallerpc(void *x) +{ + return (((ulong*)(x))[-4]); +} (DIR) diff --git a/src/lib9/getcallerpc-PowerMacintosh.s b/src/lib9/getcallerpc-PowerMacintosh.s t@@ -1,5 +0,0 @@ -.text -.globl _getcallerpc -_getcallerpc: - mflr r3 - blr (DIR) diff --git a/src/lib9/pipe.c b/src/lib9/pipe.c t@@ -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); } (DIR) diff --git a/src/libthread/fdwait.c b/src/libthread/fdwait.c t@@ -167,7 +167,7 @@ threadfdwaitsetup(void) } void -threadfdwait(int fd, int rw) +_threadfdwait(int fd, int rw, ulong pc) { int i; t@@ -192,11 +192,18 @@ 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) { struct { t@@ -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; } } t@@ -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; } } t@@ -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; } } t@@ -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; } }