From: Makoto Kishimoto Date: 2011-10-14T10:34:07+09:00 Subject: [ruby-dev:44600] [Ruby 1.9 - Bug #2642][Open] PTY.check is broken Issue #2642 has been updated by Makoto Kishimoto. Status changed from Closed to Open Target version set to 1.9.x この修正以後、PTY.check の第二引数が真値のとき、対象のプロセスが まだ動いていても、いきなり ChildExited が上がってくるようになって しまっています。 ---------------------------------------- Bug #2642: PTY.check is broken http://redmine.ruby-lang.org/issues/2642 Author: Nobuyoshi Nakada Status: Open Priority: Low Assignee: Category: Target version: 1.9.x =begin なかだです。 PTY.checkがいろいろと壊れているような気がします。 * r20298によると PTY.check(pid) to poll program termination. と いうことなのに終了まで待ち続ける * メソッド本体なのにint statusを返している * pid_tを期待するraise_from_check()にVALUEを渡している Index: ext/pty/pty.c =================================================================== --- ext/pty/pty.c (revision 26395) +++ ext/pty/pty.c (working copy) @@ -606,9 +606,9 @@ pty_check(int argc, VALUE *argv, VALUE s rb_scan_args(argc, argv, "11", &pid, &exc); - cpid = rb_waitpid(NUM2PIDT(pid), &status, WUNTRACED); + cpid = rb_waitpid(NUM2PIDT(pid), &status, WNOHANG|WUNTRACED); if (cpid == -1) return Qnil; - if (!RTEST(exc)) return status; - raise_from_check(pid, status); + if (!RTEST(exc)) return rb_last_status_get(); + raise_from_check(cpid, status); return Qnil; /* not reached */ } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦 =end -- http://redmine.ruby-lang.org