BUG/MEDIUM: fd: Don't modify the update_mask in fd_dodelete().

Only the pollers should remove bits in the update_mask. Removing it will
mean if the fd is currently in the global update list, it will never be
removed, and while it's mostly harmless in 1.9, in 1.8, only update_mask
is checked to know if the fd is already in the list or not, so we can end
up trying to add a fd that is already in the list, and corrupt it, which
means some fd may not be added to the poller.

This should be backported to 1.8.
This commit is contained in:
Olivier Houchard 2018-06-19 19:18:43 +02:00 committed by Willy Tarreau
parent a8cf95d629
commit d0e60d852a

View File

@ -371,7 +371,6 @@ static void fd_dodelete(int fd, int do_close)
port_range_release_port(fdinfo[fd].port_range, fdinfo[fd].local_port);
fdinfo[fd].port_range = NULL;
fdtab[fd].owner = NULL;
fdtab[fd].update_mask &= ~tid_bit;
fdtab[fd].thread_mask = 0;
if (do_close) {
polled_mask[fd] = 0;