ruby-changes:22377
From: naruse <ko1@a...>
Date: Fri, 3 Feb 2012 16:20:10 +0900 (JST)
Subject: [ruby-changes:22377] naruse:r34426 (ruby_1_9_3): merge revision(s) 34040,34051,34063,34389,34402,34403:
naruse 2012-02-03 16:17:03 +0900 (Fri, 03 Feb 2012) New Revision: 34426 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34426 Log: merge revision(s) 34040,34051,34063,34389,34402,34403: ------------------------------------------------------------------------ r34040 | naruse | 2011-12-14 14:42:34 +0900 (Wed, 14 Dec 2011) | 1 line Use pipe instead of $stdin.read. ------------------------------------------------------------------------ * test/ruby/envutil.rb (invoke_ruby): remove :timeout option before pass it to Kernel#spawn. * test/ruby/test_thread.rb (TestThreadGroup#test_thread_timer_and_interrupt): skip exit status assertion because we cannot get signal status on Windows. * win32/win32.c (CreateChild): create process group to receive the signal by GenerateConsoleCtrlEvent(). * win32/win32.c (kill): use CTRL_BREAK_EVENT instead of CTRL_C_EVENT if a process group is specified. CTRL_C_EVENT signal cannot be generated for process groups for the specification. [ruby-dev:45149] [Bug #5812] * test/ruby/envutil.rb (EnvUtil.invoke_ruby): yield also child pid in block form. Modified files: branches/ruby_1_9_3/ChangeLog branches/ruby_1_9_3/test/ruby/envutil.rb branches/ruby_1_9_3/test/ruby/test_thread.rb branches/ruby_1_9_3/version.h branches/ruby_1_9_3/win32/win32.c Index: ruby_1_9_3/ChangeLog =================================================================== --- ruby_1_9_3/ChangeLog (revision 34425) +++ ruby_1_9_3/ChangeLog (revision 34426) @@ -1,3 +1,27 @@ +Fri Feb 3 16:16:10 2012 Nobuyoshi Nakada <nobu@r...> + + * test/ruby/envutil.rb (EnvUtil.invoke_ruby): yield also child pid + in block form. + +Fri Feb 3 16:16:10 2012 Hiroshi Shirosaki <h.shirosaki@g...> + + * test/ruby/test_thread.rb + (TestThreadGroup#test_thread_timer_and_interrupt): skip exit status + assertion because we cannot get signal status on Windows. + + * win32/win32.c (CreateChild): create process group to receive the + signal by GenerateConsoleCtrlEvent(). + + * win32/win32.c (kill): use CTRL_BREAK_EVENT instead of CTRL_C_EVENT + if a process group is specified. CTRL_C_EVENT signal cannot be + generated for process groups for the specification. + [ruby-dev:45149] [Bug #5812] + +Fri Feb 3 16:16:10 2012 CHIKANAGA Tomoyuki <nagachika00@g...> + + * test/ruby/envutil.rb (invoke_ruby): remove :timeout option before + pass it to Kernel#spawn. + Fri Feb 3 10:10:02 2012 CHIKANAGA Tomoyuki <nagachika00@g...> * thread_pthread.c (ping_signal_thread_list): remove return value. Index: ruby_1_9_3/win32/win32.c =================================================================== --- ruby_1_9_3/win32/win32.c (revision 34425) +++ ruby_1_9_3/win32/win32.c (revision 34426) @@ -1058,7 +1058,7 @@ aStartupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); } - dwCreationFlags = (NORMAL_PRIORITY_CLASS); + dwCreationFlags = (CREATE_NEW_PROCESS_GROUP | NORMAL_PRIORITY_CLASS); if (lstrlenW(cmd) > 32767) { child->pid = 0; /* release the slot */ @@ -3851,7 +3851,13 @@ case SIGINT: RUBY_CRITICAL({ - if (!GenerateConsoleCtrlEvent(CTRL_C_EVENT, (DWORD)pid)) { + DWORD ctrlEvent = CTRL_C_EVENT; + if (pid != 0) { + /* CTRL+C signal cannot be generated for process groups. + * Instead, we use CTRL+BREAK signal. */ + ctrlEvent = CTRL_BREAK_EVENT; + } + if (!GenerateConsoleCtrlEvent(ctrlEvent, (DWORD)pid)) { if ((err = GetLastError()) == 0) errno = EPERM; else Index: ruby_1_9_3/version.h =================================================================== --- ruby_1_9_3/version.h (revision 34425) +++ ruby_1_9_3/version.h (revision 34426) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 30 +#define RUBY_PATCHLEVEL 31 #define RUBY_RELEASE_DATE "2012-02-03" #define RUBY_RELEASE_YEAR 2012 Index: ruby_1_9_3/test/ruby/envutil.rb =================================================================== --- ruby_1_9_3/test/ruby/envutil.rb (revision 34425) +++ ruby_1_9_3/test/ruby/envutil.rb (revision 34426) @@ -42,6 +42,7 @@ out_p.set_encoding(enc) if out_p err_p.set_encoding(enc) if err_p end + timeout = opt.delete(:timeout) || 10 c = "C" child_env = {} LANG_ENVS.each {|lc| child_env[lc] = c} @@ -54,13 +55,12 @@ out_c.close if capture_stdout err_c.close if capture_stderr && capture_stderr != :merge_to_stdout if block_given? - return yield in_p, out_p, err_p + return yield in_p, out_p, err_p, pid else th_stdout = Thread.new { out_p.read } if capture_stdout th_stderr = Thread.new { err_p.read } if capture_stderr && capture_stderr != :merge_to_stdout in_p.write stdin_data.to_str in_p.close - timeout = opt.fetch(:timeout, 10) if (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout)) stdout = th_stdout.value if capture_stdout stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout Index: ruby_1_9_3/test/ruby/test_thread.rb =================================================================== --- ruby_1_9_3/test/ruby/test_thread.rb (revision 34425) +++ ruby_1_9_3/test/ruby/test_thread.rb (revision 34426) @@ -689,15 +689,23 @@ def test_thread_timer_and_interrupt bug5757 = '[ruby-dev:44985]' t0 = Time.now.to_f - pid = spawn(EnvUtil.rubybin, '-e', '$stdin.read') - sleep 1; - Process.kill(:SIGQUIT, pid) - Process.wait(pid) - s = $? - assert_equal([false, true, false], - [s.exited?, s.signaled?, s.stopped?], - "[s.exited?, s.signaled?, s.stopped?]") + pid = nil + cmd = 'r,=IO.pipe; Thread.start {Thread.pass until Thread.main.stop?; puts; STDOUT.flush}; r.read' + s, err = EnvUtil.invoke_ruby(['-e', cmd], "", true, true) do |in_p, out_p, err_p, cpid| + out_p.gets + pid = cpid + Process.kill(:SIGINT, pid) + Process.wait(pid) + [$?, err_p.read] + end t1 = Time.now.to_f + assert_equal(pid, s.pid) + unless /mswin|mingw/ =~ RUBY_PLATFORM + # status of signal is not supported on Windows + assert_equal([false, true, false, Signal.list["INT"]], + [s.exited?, s.signaled?, s.stopped?, s.termsig], + "[s.exited?, s.signaled?, s.stopped?, s.termsig]") + end assert_in_delta(t1 - t0, 1, 1) end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/