Backport #2039
closedBackport 24413, 24416, 24442 to fix IO#select threading issue
Description
=begin
See http://redmine.ruby-lang.org/issues/show/1993 in the 1.8.7 project.
Basically, there was a bug introduced between 1.8.6p287 and 1.8.6p368 which sometimes caused IO#select calls to erroneously return no results when multiple calls are in progress on different threads. It was affecting 1.8.7 as well, having been introduced into that branch between 1.8.7p72 and 1.8.7p160. It has since been corrected on the 1.8 head.
This has been affecting a great many Capistrano users on 1.8.6p368 and later patchlevels, as well as recent patchlevels of 1.8.7. (See http://capistrano.lighthouseapp.com/projects/8716/tickets/79 as well as http://net-ssh.lighthouseapp.com/projects/36253/tickets/1). We'd appreciate it if the fix on the 1.8 head could get backported to the release branches.
=end