diff --git a/src/backend.c b/src/backend.c index 5038c0260ecd5b00431188c74d0dc7fa90e87f12..bde465f5670b50ad62a682c5f26f11ceeddc2f75 100644 --- a/src/backend.c +++ b/src/backend.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: backend.c,v 1.34 1998/07/09 01:35:12 hubbe Exp $"); +RCSID("$Id: backend.c,v 1.35 1998/07/19 07:00:08 hubbe Exp $"); #include "fdlib.h" #include "backend.h" #include <errno.h> @@ -252,7 +252,8 @@ void set_read_callback(int fd,file_callback cb,void *data) if(cb) { #ifdef HAVE_POLL - POLL_FD_SET(fd,POLLRDNORM); + if(!was_set) + POLL_FD_SET(fd,POLLRDNORM); #else my_FD_SET(fd, &selectors.read); #endif @@ -295,7 +296,8 @@ void set_write_callback(int fd,file_callback cb,void *data) if(cb) { #ifdef HAVE_POLL - POLL_FD_SET(fd,POLLOUT); + if(!was_set) + POLL_FD_SET(fd,POLLOUT); #else my_FD_SET(fd, &selectors.write); #endif @@ -636,9 +638,9 @@ void backend(void) /* FIXME: OOB? */ i=fd_select(max_fd+1, &rset, &wset, 0, &next_timeout); #endif - GETTIMEOFDAY(¤t_time); THREADS_DISALLOW(); may_need_wakeup=0; + GETTIMEOFDAY(¤t_time); if (!i) { /* Timeout */ @@ -667,8 +669,20 @@ void backend(void) { int j; for(j=0;j<num_in_poll;j++) + { if(poll_fds[j].fd == fd) /* It's still there... */ - fatal("Bad filedescriptor %d to poll().\n", fd); + { + struct pollfd fds; + int ret; + fds.fd=fd; + fds.events=POLLIN; + fds.revents=0; + ret=poll(&fds, 1,1 ); + if(fds.revents & POLLNVAL) + fatal("Bad filedescriptor %d to poll().\n", fd); + break; + } + } #ifdef DEBUG handled = 1; #endif /* DEBUG */