lib/chef/knife/winrm_knife_base.rb in knife-windows-3.0.10 vs lib/chef/knife/winrm_knife_base.rb in knife-windows-3.0.11
- old
+ new
@@ -116,17 +116,19 @@
end
def relay_winrm_command(command)
Chef::Log.debug(command)
@session_results = []
-
queue = Queue.new
@winrm_sessions.each { |s| queue << s }
- # These nils will kill the Threads once no more sessions are left
- locate_config_value(:concurrency).times { queue << nil }
+ num_sessions = locate_config_value(:concurrency)
+ num_targets = @winrm_sessions.length
+ num_sessions = (num_sessions.nil? || num_sessions == 0) ? num_targets : [num_sessions, num_targets].min
+ # These nils will kill the Threads once no more sessions are left
+ num_sessions.times { queue << nil }
threads = []
- locate_config_value(:concurrency).times do
+ num_sessions.times do
threads << Thread.new do
while session = queue.pop
run_command_in_thread(session, command)
end
end