BUG/MINOR: fd: make sure my_closefrom() doesn't miss some FDs

The optimized my_closefrom() implementation introduced with previous commit
9188ac60e ("MINOR: fd: implement an optimised my_closefrom() function")
has a small bug causing it to miss some FDs at the end of each batch.
The reason is that poll() returns the number of non-zero events, so
it contains the size of the batch minus the FDs to close. Thus if the
FDs to close are at the beginning they'll be seen but if they're at the
end after all other closed ones, the returned count will not cover them.

No backport is needed.
This commit is contained in:
Willy Tarreau 2019-02-22 09:07:42 +01:00
parent 9188ac60eb
commit b8e602cb1b

View File

@ -509,6 +509,9 @@ void my_closefrom(int start)
break;
} while (errno == EAGAIN || errno == EINTR || errno == ENOMEM);
if (ret)
ret = fd - start;
for (idx = 0; idx < ret; idx++) {
if (poll_events[idx].revents & POLLNVAL)
continue; /* already closed */