def synchronize
@lock.synchronize do
@in_synchronize_block = true
begin
yield
ensure
if @next_cleaning_time.nil?
@collection.each_value do |server|
if @next_cleaning_time.nil? ||
(eligable_for_cleanup?(server) &&
server.next_cleaning_time < @next_cleaning_time
)
@next_cleaning_time = server.next_cleaning_time
end
end
if @next_cleaning_time.nil?
@next_cleaning_time = Time.now + 60 * 60
end
@next_cleaning_time_changed = true
end
if @next_cleaning_time_changed
@next_cleaning_time_changed = false
@cond.signal
end
@in_synchronize_block = false
end
end
end