* 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/trunk@33468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-10-14 03:14:00 +00:00
parent 3a0e582e1f
commit 039f12b5bb
3 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,8 @@
Fri Oct 14 12:13:57 2011 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]
Fri Oct 14 11:19:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org> Fri Oct 14 11:19:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/intern.h (rb_ary_reverse): export. * include/ruby/intern.h (rb_ary_reverse): export.

View File

@ -658,7 +658,7 @@ pty_check(int argc, VALUE *argv, VALUE self)
rb_scan_args(argc, argv, "11", &pid, &exc); rb_scan_args(argc, argv, "11", &pid, &exc);
cpid = rb_waitpid(NUM2PIDT(pid), &status, WNOHANG|WUNTRACED); 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(); if (!RTEST(exc)) return rb_last_status_get();
raise_from_check(cpid, status); raise_from_check(cpid, status);

View File

@ -163,5 +163,37 @@ class TestPTY < Test::Unit::TestCase
} }
end end
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 end if defined? PTY