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