Some processes close their output channels and IO.select keeps returning them as "readable", while IO#gets returns nil on them, thus spending a lot of CPU looping through the same reader continuously
This commit is contained in:
@@ -275,8 +275,12 @@ private
|
|||||||
loop do
|
loop do
|
||||||
io = IO.select(@readers.values, nil, nil, 30)
|
io = IO.select(@readers.values, nil, nil, 30)
|
||||||
(io.nil? ? [] : io.first).each do |reader|
|
(io.nil? ? [] : io.first).each do |reader|
|
||||||
data = reader.gets
|
if reader.eof?
|
||||||
output_with_mutex name_for(@readers.invert[reader]), data
|
@readers.delete_if { |key, value| value == reader }
|
||||||
|
else
|
||||||
|
data = reader.gets
|
||||||
|
output_with_mutex name_for(@readers.invert[reader]), data
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue Exception => ex
|
rescue Exception => ex
|
||||||
|
|||||||
Reference in New Issue
Block a user