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 */