if (!conn_ctrl_ready(conn)) {
int fd = conn->handle.fd;
- fdtab[fd].owner = conn;
- fdtab[fd].iocb = conn_fd_handler;
- fd_insert(fd, tid_bit);
+ fd_insert(fd, conn, conn_fd_handler, tid_bit);
/* mark the fd as ready so as not to needlessly poll at the beginning */
fd_may_recv(fd);
fd_may_send(fd);
}
/* Prepares <fd> for being polled */
-static inline void fd_insert(int fd, unsigned long thread_mask)
+static inline void fd_insert(int fd, void *owner, void (*iocb)(int fd), unsigned long thread_mask)
{
HA_SPIN_LOCK(FD_LOCK, &fdtab[fd].lock);
+ fdtab[fd].owner = owner;
+ fdtab[fd].iocb = iocb;
fdtab[fd].ev = 0;
fdtab[fd].update_mask &= ~tid_bit;
fdtab[fd].linger_risk = 0;
/* Add the fd in the fd list and update its parameters */
dgram->t.sock.fd = fd;
- fdtab[fd].owner = dgram;
- fdtab[fd].iocb = dgram_fd_handler;
- fd_insert(fd, (unsigned long)-1);
+ fd_insert(fd, dgram, dgram_fd_handler, MAX_THREADS_MASK);
fd_want_recv(fd);
return 0;
}
return;
fcntl(mworker_pipe[0], F_SETFL, O_NONBLOCK);
- fdtab[mworker_pipe[0]].owner = mworker_pipe;
- fdtab[mworker_pipe[0]].iocb = mworker_pipe_handler;
- fd_insert(mworker_pipe[0], MAX_THREADS_MASK);
+ fd_insert(mworker_pipe[0], mworker_pipe, mworker_pipe_handler, MAX_THREADS_MASK);
fd_want_recv(mworker_pipe[0]);
}
rfd = threads_sync_pipe[0];
fcntl(rfd, F_SETFL, O_NONBLOCK);
-
- fdtab[rfd].owner = thread_sync_io_handler;
- fdtab[rfd].iocb = thread_sync_io_handler;
- fd_insert(rfd, MAX_THREADS_MASK);
+ fd_insert(rfd, thread_sync_io_handler, thread_sync_io_handler, MAX_THREADS_MASK);
all_threads_mask = mask;
return 0;
listener->fd = fd;
listener->state = LI_LISTEN;
- fdtab[fd].owner = listener; /* reference the listener instead of a task */
- fdtab[fd].iocb = listener->proto->accept;
- if (listener->bind_conf->bind_thread[relative_pid-1])
- fd_insert(fd, listener->bind_conf->bind_thread[relative_pid-1]);
- else
- fd_insert(fd, MAX_THREADS_MASK);
+ fd_insert(fd, listener, listener->proto->accept,
+ listener->bind_conf->bind_thread[relative_pid-1] ?
+ listener->bind_conf->bind_thread[relative_pid-1] : MAX_THREADS_MASK);
tcp_return:
if (msg && errlen) {
listener->fd = fd;
listener->state = LI_LISTEN;
- /* the function for the accept() event */
- fdtab[fd].iocb = listener->proto->accept;
- fdtab[fd].owner = listener; /* reference the listener instead of a task */
- if (listener->bind_conf->bind_thread[relative_pid-1])
- fd_insert(fd, listener->bind_conf->bind_thread[relative_pid-1]);
- else
- fd_insert(fd, MAX_THREADS_MASK);
+ fd_insert(fd, listener, listener->proto->accept,
+ listener->bind_conf->bind_thread[relative_pid-1] ?
+ listener->bind_conf->bind_thread[relative_pid-1] : MAX_THREADS_MASK);
+
return err;
err_rename:
*/
static void inline ssl_async_process_fds(struct connection *conn, SSL *ssl)
{
- OSSL_ASYNC_FD add_fd[32], afd;
+ OSSL_ASYNC_FD add_fd[32];
OSSL_ASYNC_FD del_fd[32];
size_t num_add_fds = 0;
size_t num_del_fds = 0;
/* We add new fds to the fdtab */
for (i=0 ; i < num_add_fds ; i++) {
- afd = add_fd[i];
- fdtab[afd].owner = conn;
- fdtab[afd].iocb = ssl_async_fd_handler;
- fd_insert(afd, tid_bit);
+ fd_insert(add_fd[i], conn, ssl_async_fd_handler, tid_bit);
}
num_add_fds = 0;