aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-03 01:00:23 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-03 01:00:23 +0000
commit6bdde0e5e612befe47c0a4e87f4900dbb106f78e (patch)
tree57a32461394f61f9442dccb1f052d141efd5a99e
parent9e736114eb489293a3708d04efed3cb492de6f92 (diff)
downloadruby-6bdde0e5e612befe47c0a4e87f4900dbb106f78e.tar.gz
merge revision(s) 33468:
* ext/pty/pty.c (pty_check): should return nil until the child terminates or stops. [ruby-dev:44600] [Bug #2642] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34183 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ext/pty/pty.c2
-rw-r--r--test/test_pty.rb32
-rw-r--r--version.h6
4 files changed, 41 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 46f44e2eb0..03f282a02d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jan 2 20:00:01 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (pty_check): should return nil until the child
+ terminates or stops. [ruby-dev:44600] [Bug #2642]
+
Mon Jan 2 19:27:18 2012 Yusuke Endoh <mame@tsg.ne.jp>
* thread.c (update_coverage): skip coverage count up if the current
diff --git a/ext/pty/pty.c b/ext/pty/pty.c
index 3797972975..b18eb68f77 100644
--- a/ext/pty/pty.c
+++ b/ext/pty/pty.c
@@ -658,7 +658,7 @@ pty_check(int argc, VALUE *argv, VALUE self)
rb_scan_args(argc, argv, "11", &pid, &exc);
cpid = rb_waitpid(NUM2PIDT(pid), &status, WNOHANG|WUNTRACED);
- if (cpid == -1) return Qnil;
+ if (cpid == -1 || cpid == 0) return Qnil;
if (!RTEST(exc)) return rb_last_status_get();
raise_from_check(cpid, status);
diff --git a/test/test_pty.rb b/test/test_pty.rb
index fc8cd95c8b..025cafc8f8 100644
--- a/test/test_pty.rb
+++ b/test/test_pty.rb
@@ -163,5 +163,37 @@ class TestPTY < Test::Unit::TestCase
}
end
end
+
+ def test_pty_check_default
+ st1 = st2 = pid = nil
+ `echo` # preset $?
+ PTY.spawn("cat") do |r,w,id|
+ pid = id
+ st1 = PTY.check(pid)
+ w.close
+ r.close
+ sleep(0.1)
+ st2 = PTY.check(pid)
+ end
+ assert_equal(pid, st1.pid) if st1
+ assert_nil(st1)
+ assert_equal(pid, st2.pid)
+ end
+
+ def test_pty_check_raise
+ bug2642 = '[ruby-dev:44600]'
+ st1 = st2 = pid = nil
+ PTY.spawn("cat") do |r,w,id|
+ pid = id
+ assert_nothing_raised(PTY::ChildExited, bug2642) {st1 = PTY.check(pid, true)}
+ w.close
+ r.close
+ sleep(0.1)
+ st2 = assert_raise(PTY::ChildExited, bug2642) {PTY.check(pid, true)}.status
+ end
+ assert_equal(pid, st1.pid) if st1
+ assert_nil(st1)
+ assert_equal(pid, st2.pid)
+ end
end if defined? PTY
diff --git a/version.h b/version.h
index 2fc9769b4d..baf0150bbb 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 9
+#define RUBY_PATCHLEVEL 10
-#define RUBY_RELEASE_DATE "2012-01-03"
+#define RUBY_RELEASE_DATE "2012-01-02"
#define RUBY_RELEASE_YEAR 2012
#define RUBY_RELEASE_MONTH 1
-#define RUBY_RELEASE_DAY 3
+#define RUBY_RELEASE_DAY 2
#include "ruby/version.h"