summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlamont-granquist <lamont@scriptkiddie.org>2014-08-27 10:03:38 -0700
committerlamont-granquist <lamont@scriptkiddie.org>2014-08-27 10:03:38 -0700
commit7070c0b3807a68cf56b0f38b21f7e0600d972dfb (patch)
tree96151d1a0bc26b82eafdfceaf8b6fe3739692dd8
parent8d3f6bc696921b964b8b20c812e1da83714670ca (diff)
parent00cff06778607caf6abf7783d276f441af00237e (diff)
downloadmixlib-shellout-7070c0b3807a68cf56b0f38b21f7e0600d972dfb.tar.gz
Merge pull request #56 from ClogenyTechnologies/kd/aix-fdperf
aix - #clean_parent_file_descriptors is slow
-rw-r--r--.travis.yml2
-rw-r--r--lib/mixlib/shellout/unix.rb29
-rw-r--r--spec/mixlib/shellout_spec.rb14
3 files changed, 2 insertions, 43 deletions
diff --git a/.travis.yml b/.travis.yml
index 4cc49e0..02a71ae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,7 @@
rvm:
- - 1.8.7
- 1.9.3
- 2.0.0
+ - 2.1.2
branches:
only:
diff --git a/lib/mixlib/shellout/unix.rb b/lib/mixlib/shellout/unix.rb
index be2e66a..f93d2e5 100644
--- a/lib/mixlib/shellout/unix.rb
+++ b/lib/mixlib/shellout/unix.rb
@@ -211,31 +211,6 @@ module Mixlib
STDIN.sync = true if input
end
- # When a new process is started with chef, it shares the file
- # descriptors of the parent. We clean the file descriptors
- # coming from the parent to prevent unintended locking if parent
- # is killed.
- # NOTE: After some discussions we've decided to iterate on file
- # descriptors upto 256. We believe this is a reasonable upper
- # limit in a chef environment. If we have issues in the future this
- # number could be made to be configurable or updated based on
- # the ulimit based on platform.
- def clean_parent_file_descriptors
- # Don't clean $stdin, $stdout, $stderr, process_status_pipe.
- 3.upto(256) do |n|
- # We are checking the fd for error pipe before attempting to
- # create a file because error pipe will auto close when we
- # try to create a file since it's set to CLOEXEC.
- if n != @process_status_pipe.last.to_i
- begin
- fd = File.for_fd(n)
- fd.close if fd
- rescue
- end
- end
- end
- end
-
def configure_parent_process_file_descriptors
# Close the sides of the pipes we don't care about
stdin_pipe.first.close
@@ -309,8 +284,6 @@ module Mixlib
configure_subprocess_file_descriptors
- clean_parent_file_descriptors
-
set_group
set_user
set_environment
@@ -318,7 +291,7 @@ module Mixlib
set_cwd
begin
- command.kind_of?(Array) ? exec(*command) : exec(command)
+ command.kind_of?(Array) ? exec(*command, :close_others=>true) : exec(command, :close_others=>true)
raise 'forty-two' # Should never get here
rescue Exception => e
diff --git a/spec/mixlib/shellout_spec.rb b/spec/mixlib/shellout_spec.rb
index ff493c2..dca66ae 100644
--- a/spec/mixlib/shellout_spec.rb
+++ b/spec/mixlib/shellout_spec.rb
@@ -1318,19 +1318,5 @@ describe Mixlib::ShellOut do
end
end
end
-
- describe "#clean_parent_file_descriptors", :unix_only do
- # test for for_fd returning a valid File object, but close
- # throwing EBADF.
- it "should not throw an exception if fd.close throws EBADF" do
- fd = double('File')
- fd.stub(:close).at_least(:once).and_raise(Errno::EBADF)
- File.should_receive(:for_fd).at_least(:once).and_return(fd)
- shellout = Mixlib::ShellOut.new()
- shellout.instance_variable_set(:@process_status_pipe, [ 98, 99 ])
- lambda { shellout.send(:clean_parent_file_descriptors) }.should_not raise_error
- end
- end
-
end
end