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;
                        }
                }