lib/elecksee/helpers.rb in elecksee-1.1.8 vs lib/elecksee/helpers.rb in elecksee-2.0.0

- old
+ new

@@ -2,10 +2,14 @@ class Lxc # Helper modules module Helpers + class << self + attr_accessor :child_process_lock + end + autoload :Copies, 'elecksee/helpers/copies' autoload :Options, 'elecksee/helpers/options' # @return [String] sudo command string def sudo @@ -54,15 +58,18 @@ begin s_out = Tempfile.new('stdout') s_err = Tempfile.new('stderr') s_out.sync s_err.sync - c_proc = ChildProcess.build(*Shellwords.split(cmd)) - c_proc.environment.merge('HOME' => detect_home) - c_proc.io.stdout = s_out - c_proc.io.stderr = s_err - c_proc.start + c_proc = nil + Lxc::Helpers.child_process_lock.synchronize do + c_proc = ChildProcess.build(*Shellwords.split(cmd)) + c_proc.environment.merge('HOME' => detect_home) + c_proc.io.stdout = s_out + c_proc.io.stderr = s_err + c_proc.start + end begin c_proc.poll_for_exit(args[:timeout] || 1200) rescue ChildProcess::TimeoutError c_proc.stop ensure @@ -226,5 +233,7 @@ @stderr = original.stderr.map(&:to_s).join("\n") end end end + +Lxc::Helpers.child_process_lock = Mutex.new