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