[MINOR] recompute maxfd before touching fdtab
It may be dangerous to play with fdtab before doing fd_insert()
because this last one is responsible for growing maxfd as needed.
Call fd_insert() before instead.
diff --git a/src/checks.c b/src/checks.c
index 0a27201..0996925 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -329,6 +329,7 @@
//fprintf(stderr, "process_chk: 4\n");
s->curfd = fd; /* that's how we know a test is in progress ;-) */
+ fd_insert(fd);
fdtab[fd].owner = t;
fdtab[fd].cb[DIR_RD].f = &event_srv_chk_r;
fdtab[fd].cb[DIR_RD].b = NULL;
@@ -339,7 +340,6 @@
#ifdef DEBUG_FULL
assert (!EV_FD_ISSET(fd, DIR_RD));
#endif
- fd_insert(fd);
/* FIXME: we allow up to <inter> for a connection to establish, but we should use another parameter */
tv_delayfrom(&t->expire, &now, s->inter);
task_queue(t); /* restore t to its place in the task list */
diff --git a/src/client.c b/src/client.c
index 6b27df6..46cf43e 100644
--- a/src/client.c
+++ b/src/client.c
@@ -378,6 +378,7 @@
s->rep->wto = s->fe->clitimeout;
s->rep->cto = 0;
+ fd_insert(cfd);
fdtab[cfd].owner = t;
fdtab[cfd].state = FD_STREADY;
fdtab[cfd].cb[DIR_RD].f = &stream_sock_read;
@@ -402,8 +403,6 @@
EV_FD_SET(cfd, DIR_RD);
}
- fd_insert(cfd);
-
tv_eternity(&s->req->rex);
tv_eternity(&s->req->wex);
tv_eternity(&s->req->cex);
diff --git a/src/proxy.c b/src/proxy.c
index a5431c2..93eab16 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -147,12 +147,12 @@
listener->fd = fd;
/* the function for the accept() event */
+ fd_insert(fd);
fdtab[fd].cb[DIR_RD].f = &event_accept;
fdtab[fd].cb[DIR_WR].f = NULL; /* never called */
fdtab[fd].cb[DIR_RD].b = fdtab[fd].cb[DIR_WR].b = NULL;
fdtab[fd].owner = (struct task *)curproxy; /* reference the proxy instead of a task */
fdtab[fd].state = FD_STLISTEN;
- fd_insert(fd);
listeners++;
}