class Async::Pool::Controller
def prune(retain = 0)
@parameter retain [Integer] the minimum number of resources to retain.
Retire (and close) all unused resources. If a block is provided, it should implement the desired functionality for unused resources.
def prune(retain = 0) unused = [] # This code must not context switch: @resources.each do |resource, usage| if usage.zero? unused << resource end end # It's okay for this to context switch: unused.each do |resource| if block_given? yield resource else retire(resource) end break if @resources.size <= retain end # Update availability list: @available.clear @resources.each do |resource, usage| if usage < resource.concurrency and resource.reusable? @available << resource end end return unused.size end