From 195645536743aeb99eb336726823c38716cec02d Mon Sep 17 00:00:00 2001 From: rsc Date: Mon, 8 Nov 2004 16:03:20 +0000 Subject: more thread work --- src/libthread/fdwait.c | 159 ++++--------------------------------------------- 1 file changed, 11 insertions(+), 148 deletions(-) (limited to 'src/libthread/fdwait.c') diff --git a/src/libthread/fdwait.c b/src/libthread/fdwait.c index a46ea456..d3983419 100644 --- a/src/libthread/fdwait.c +++ b/src/libthread/fdwait.c @@ -7,164 +7,25 @@ #include #include -#define debugpoll 0 - -#ifdef __APPLE__ -#include -enum { POLLIN=1, POLLOUT=2, POLLERR=4 }; -struct pollfd -{ - int fd; - int events; - int revents; -}; - -int -poll(struct pollfd *p, int np, int ms) +void +fdwait() { - int i, maxfd, n; - struct timeval tv, *tvp; fd_set rfd, wfd, efd; - - maxfd = -1; + FD_ZERO(&rfd); FD_ZERO(&wfd); FD_ZERO(&efd); - for(i=0; i maxfd) - maxfd = p[i].fd; - if(p[i].events & POLLIN) - FD_SET(p[i].fd, &rfd); - if(p[i].events & POLLOUT) - FD_SET(p[i].fd, &wfd); - FD_SET(p[i].fd, &efd); - } - - if(ms != -1){ - tv.tv_usec = (ms%1000)*1000; - tv.tv_sec = ms/1000; - tvp = &tv; - }else - tvp = nil; - - if(debugpoll){ - fprint(2, "select %d:", maxfd+1); - for(i=0; i<=maxfd; i++){ - if(FD_ISSET(i, &rfd)) - fprint(2, " r%d", i); - if(FD_ISSET(i, &wfd)) - fprint(2, " w%d", i); - if(FD_ISSET(i, &efd)) - fprint(2, " e%d", i); - } - fprint(2, "; tp=%p, t=%d.%d\n", tvp, tv.tv_sec, tv.tv_usec); - } - - n = select(maxfd+1, &rfd, &wfd, &efd, tvp); - - if(n <= 0) - return n; - - for(i=0; i -#endif - -/* - * Poll file descriptors in an idle loop. - */ - -typedef struct Poll Poll; - -struct Poll -{ - Channel *c; /* for sending back */ -}; - -static Channel *sleepchan[64]; -static int sleeptime[64]; -static int nsleep; - -static struct pollfd pfd[64]; -static struct Poll polls[64]; -static int npoll; - -static void -pollidle(void *v) -{ - int i, n, t; - uint now; - - for(;; yield()){ - if(debugpoll) fprint(2, "poll %d:", npoll); - for(i=0; i