prevent single listener from monopolizing a worker
commit221340c4ebc1566677a29551bf4be7c05fc64b07
authorEric Wong <e@yhbt.net>
Thu, 16 Apr 2020 09:24:57 +0000 (16 09:24 +0000)
committerEric Wong <bofh@yhbt.net>
Thu, 16 Apr 2020 09:25:31 +0000 (16 09:25 +0000)
treed8abed8f73ea23ac52f45be186e521c01e8ad8a6
parent00346227dfe91a6a11f95a679cef38940f79f12a
prevent single listener from monopolizing a worker

In setups with multiple listeners, it's possible for our greedy
select(2)-avoidance optimization to get pinned on a single, busy
listener and starve the other listener(s).

Prevent starvation by retrying the select(2)-avoidance
optimization if and only if all listeners were active.  This
should have no effect on the majority of deployments with only a
single listener.

Thanks to Stan Hu for reporting and testing.

Reported-by: Stan Hu <stanhu@gmail.com>
Tested-by: Stan Hu <stanhu@gmail.com>
Link: https://yhbt.net/unicorn-public/CAMBWrQ=Yh42MPtzJCEO7XryVknDNetRMuA87irWfqVuLdJmiBQ@mail.gmail.com/
lib/unicorn/http_server.rb