return _HA_ATOMIC_AND_FETCH(&fdtab[fd].running_mask, ~tid_bit);
}
-/* Prepares <fd> for being polled */
+/* Prepares <fd> for being polled on all permitted threads (these will then be
+ * refined to only cover running ones).
+*/
static inline void fd_insert(int fd, void *owner, void (*iocb)(int fd), unsigned long thread_mask)
{
extern void sock_conn_iocb(int);
BUG_ON(fd < 0 || fd >= global.maxsock);
BUG_ON(fdtab[fd].owner != NULL);
BUG_ON(fdtab[fd].state != 0);
+
+ thread_mask &= all_threads_mask;
BUG_ON(thread_mask == 0);
fdtab[fd].owner = owner;
rx->flags |= RX_F_BOUND;
- fd_insert(rx->fd, rx->owner, rx->iocb, rx->bind_thread & all_threads_mask);
+ fd_insert(rx->fd, rx->owner, rx->iocb, rx->bind_thread);
return err;
bind_return:
rx->fd = fd;
rx->flags |= RX_F_BOUND;
- fd_insert(fd, rx->owner, rx->iocb, rx->bind_thread & all_threads_mask);
+ fd_insert(fd, rx->owner, rx->iocb, rx->bind_thread);
/* for now, all regularly bound TCP listeners are exportable */
if (!(rx->flags & RX_F_INHERITED))
rx->fd = fd;
rx->flags |= RX_F_BOUND;
- fd_insert(fd, rx->owner, rx->iocb, rx->bind_thread & all_threads_mask);
+ fd_insert(fd, rx->owner, rx->iocb, rx->bind_thread);
/* for now, all regularly bound TCP listeners are exportable */
if (!(rx->flags & RX_F_INHERITED))