When intializing a listener, let's make sure the bind_thread mask is
always limited to all_threads_mask when inserting the FD. This will
avoid seeing listening FDs with bits corresponding to threads that are
not active (e.g. when using "bind ... process 1/even"). The side effect
is very limited, all that was identified is that atomic operations are
used in fd_update_events() when not necessary. It's more a matter of
long-term correctness in practice.
This fix might be backported as far as 1.8 (then proto_sockpair must
be dropped).
listener->state = LI_LISTEN;
fd_insert(fd, listener, listener->proto->accept,
- thread_mask(listener->bind_conf->bind_thread));
+ thread_mask(listener->bind_conf->bind_thread) & all_threads_mask);
return err;
listener->state = LI_LISTEN;
fd_insert(fd, listener, listener->proto->accept,
- thread_mask(listener->bind_conf->bind_thread));
+ thread_mask(listener->bind_conf->bind_thread) & all_threads_mask);
tcp_return:
if (msg && errlen) {
listener->state = LI_LISTEN;
fd_insert(fd, listener, listener->proto->accept,
- thread_mask(listener->bind_conf->bind_thread));
+ thread_mask(listener->bind_conf->bind_thread) & all_threads_mask);
return err;