diff --git a/ChangeLog b/ChangeLog index ccaf9a4c61..9d4e3b1e7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +Sat Jun 26 10:08:36 2010 Nobuyoshi Nakada + + * test/ruby/envutil.rb (EnvUtil#invoke_ruby): no needs to copy the + original ENV, since it's done in spawn automatically. + [ruby-dev:41733] + +Fri Jun 25 10:07:14 2010 Nobuyoshi Nakada + + * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err): + return the exit status. + + * test/ruby/envutil.rb (EnvUtil#invoke_ruby): change the + environment of spawned process only. + + * test/ruby/envutil.rb (EnvUtil#invoke_ruby): get rid of possible + deadlock. + Wed Jun 23 23:49:21 2010 Tanaka Akira * ext/socket/raddrinfo.c (str_is_number): renamed from str_isnumber to diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index 7e52a8ffd7..0703ee4f0d 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -69,9 +69,6 @@ module EnvUtil in_c, in_p = IO.pipe out_p, out_c = IO.pipe if capture_stdout err_p, err_c = IO.pipe if capture_stderr - c = "C" - env = {} - LANG_ENVS.each {|lc| env[lc], ENV[lc] = ENV[lc], c} opt = opt.dup opt[:in] = in_c opt[:out] = out_c if capture_stdout @@ -80,18 +77,21 @@ module EnvUtil out_p.set_encoding(enc) if out_p err_p.set_encoding(enc) if err_p end + c = "C" + child_env = {} + LANG_ENVS.each {|lc| child_env[lc] = c} case args.first when Hash - child_env = [args.shift] + child_env.update(args.shift) end - pid = spawn(*child_env, EnvUtil.rubybin, *args, opt) + pid = spawn(child_env, EnvUtil.rubybin, *args, opt) in_c.close out_c.close if capture_stdout err_c.close if capture_stderr - in_p.write stdin_data.to_str - in_p.close th_stdout = Thread.new { out_p.read } if capture_stdout th_stderr = Thread.new { err_p.read } if capture_stderr + in_p.write stdin_data.to_str + in_p.close if (!capture_stdout || th_stdout.join(10)) && (!capture_stderr || th_stderr.join(10)) stdout = th_stdout.value if capture_stdout stderr = th_stderr.value if capture_stderr @@ -103,13 +103,6 @@ module EnvUtil Process.wait pid status = $? ensure - env.each_pair {|lc, v| - if v - ENV[lc] = v - else - ENV.delete(lc) - end - } if env in_c.close if in_c && !in_c.closed? in_p.close if in_p && !in_p.closed? out_c.close if out_c && !out_c.closed? @@ -205,6 +198,7 @@ module Test else assert_equal(test_stderr, stderr.lines.map {|l| l.chomp }, message) end + status end end