* 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>
|
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.
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user