ConnectionPool: avoid undefined behavior for hash iteration
commit2acba9e5af7d898cfb5ab89c5c8c1f79050d6632
authorEric Wong <e@80x24.org>
Mon, 13 Feb 2017 00:19:42 +0000 (13 00:19 +0000)
committerEric Wong <e@80x24.org>
Mon, 13 Feb 2017 00:29:53 +0000 (13 00:29 +0000)
treee2b3f9bdc710ea93bfad207935cf1c8b6fa04917
parent6832b1b8514e2967c778bdfecec9f5f4b65567b8
ConnectionPool: avoid undefined behavior for hash iteration

Perl 5.18 stable and later (commit a7b39f85d7caac) introduced a
warning for restarting `each` after hash modification.  While we
accounted for this undefined behavior and documented it in the
past, this may still cause maintenance problems in the future
despite our current workarounds being sufficient.

In any case, keeping idle sockets around is cheap with modern
APIs, and conn_pool_size was introduced in 2.72 to avoid
dropping idle connections at all; so _conn_drop_idle may
never be called on a properly configured tracker.

Mailing list references:

<CABJfL5jiAGC+5JzZjuW7R_NXs1DShHPGsKnjzXrPbjWOy2wi3g@mail.gmail.com>
<20160114024652.GA4403@dcvr.yhbt.net>
lib/MogileFS/ConnectionPool.pm