* 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:
parent
3a0e582e1f
commit
039f12b5bb
@ -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>
|
||||
|
||||
* include/ruby/intern.h (rb_ary_reverse): export.
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user