[#13727] Thread.critical=true and fork and exec — Kazuhiro NISHIYAMA <zn@...>
このような感じでforkとexecの間に必要のないIOを閉じようと
[#13754] Kconv(NKF) with tainted strings — Tietew <tietew@...>
Tietew といいます。
[#13765] GenerativeHash — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
まつもと ゆきひろです
高橋征義です。
TAKAHASHI Masayoshiさんの
高橋征義です。
[#13767] Dir::glob() — "Akinori MUSHA" <knu@...>
File::fnmatch の提案のときに切り離した、 Dir::glob の拡張を
[#13774] mkmf.rb: cleaning facility — Takaaki Tateishi <ttate@...>
立石です.
まつもと ゆきひろです
At Mon, 9 Jul 2001 15:20:28 +0900,
まつもと ゆきひろです
[#13779] dln.c patch for Mac OS X — Mitsuhiro Kondo <kondo@...>
こんにちは、近藤と申します。
[#13800] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — nobu.nakada@...
なかだです。
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
At Tue, 10 Jul 2001 15:23:04 +0900,
わたなべです。
At Tue, 10 Jul 2001 16:50:52 +0900,
もうひとつあった。
At Tue, 10 Jul 2001 18:04:57 +0900,
まつもと ゆきひろです
At Mon, 16 Jul 2001 01:16:31 +0900,
まつもと ゆきひろです
At Mon, 16 Jul 2001 09:22:46 +0900,
まつもと ゆきひろです
[#13817] Fw: DOSISH file.c changes — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
なかだです。
[#13818] COPYING files — "Akinori MUSHA" <knu@...>
Ruby は GPL のシングルライセンスではないのに、 COPYING という
先日の:
高橋征義です。
[#13821] [BUG] rb_gc_mark(): unknown data type 0x1c(0xbfff3d6c) non object — akira yamada / やまだあきら <akira@...>
[#13824] config.{guess,sub} too old? — akira yamada / やまだあきら <akira@...>
[#13828] supported platforms / K&R — "Akinori MUSHA" <knu@...>
digest モジュールの各プラットフォームでの動作確認をお願いした
新井です。
清水@biglobeです。
新井です。
清水@biglobe です。
なかだです。
新井です。
新井です。
なかだです。
新井です。
なかだです。
新井です。
なかだです。
新井です。
新井です。
[#13833] Net::HTTP#proxy? — WATANABE Hirofumi <eban@...>
わたなべです。
[#13866] yield and proc — Takashi Ikeda <nov28@...>
池田と申します。
[#13870] massign to Hash — nobu.nakada@...
なかだです。
[#13878] Prototype for rb_gc_mark / volatile in ruby.h — Tietew <tietew@...>
Tietew です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
むらけんです.
[#13908] Forward: Seg fault in latest regex.c (PR#154) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#13924] doc/ — Minero Aoki <aamine@...>
あおきです。
[#13929] error: multiple require of digest/* — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
まつもと ゆきひろです
[#13940] IO#read — "Akinori MUSHA" <knu@...>
IO#read を使って何度もストリームから読み込むような処理をする
なかだです。
まつもと ゆきひろです
At Sat, 21 Jul 2001 03:21:11 +0900,
まつもと ゆきひろです
At Sat, 21 Jul 2001 04:43:06 +0900,
At Sat, 21 Jul 2001 05:03:10 +0900,
[#13943] [REQ] ruby_stop without exit — Tietew <tietew@...>
Tietew です。
[#13959] Re: [ruby-list:30682] Re: overwride method — "Akinori MUSHA" <knu@...>
At Fri, 20 Jul 2001 21:09:36 +0900,
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
[ruby-dev:13969]>
まつもと ゆきひろです
ごとけんです
なひです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
あづみです。
まつもと ゆきひろです
In <996211878.306635.31396.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
In <996255758.830993.629.nullmailer@ev.netlab.jp>
まつもと ゆきひろです
In <996282482.936326.1948.nullmailer@ev.netlab.jp>
なひです。
まつもと ゆきひろです
なひです。
あづみです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
前田です。
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
[#14003] to_int in mathn [Re: overwride method ] — keiju@... (石塚圭樹)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
原です。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#14026] Exception in coerce — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
[#14045] load "~/foo" — WATANABE Hirofumi <eban@...>
わたなべです。
[#14097] DOSISH file.c — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)@帰省中です。
[ruby-dev:13764] Re: mswin32/ming32 system patch (experimental)
なかだです。
えーと、もう二個。
今win32.cのwaitpid()にpidとして-1を指定したとき、子プロセスの
どれかが終了するまでではなく、子プロセスのどれかを選んでそれが
終了するまで待つようになってしまってます。
$ ruby -e '3.times {|i|IO.popen("sleep #{3-i}")}' \
-e 'loop{p Process.waitpid(-1)}'
とすると、linuxやcygwinなどでは間をおいてpidが出力されますが、
mingwとmswinでは最後に一気に出力されます。
それから、waitpid()でChildRecordがすでに開放されているとその
後のmypclose()でfatal errorになってしまうので、とりあえず単な
るエラーということに。finalizerでmypclose()が呼ばれるまでとっ
ておくというのもありかも知れませんが、linuxで試したところでも
statusは得られないようなのでこんなところかなと。
--- win32/win32.c- Sun Jul 8 02:54:09 2001
+++ win32/win32.c Sun Jul 8 17:50:47 2001
@@ -523,5 +523,5 @@ mypclose(FILE *fp)
if (!child) {
- rb_fatal("Invalid file pointer passed to mypclose!\n");
+ return -1; /* may closed in waitpid() */
}
@@ -2267,22 +2267,32 @@ void setservent (int stayopen) {}
#endif
-pid_t
-waitpid (pid_t pid, int *stat_loc, int options)
+static pid_t
+wait_child(struct ChildRecord *child, int *stat_loc, DWORD timeout)
{
- DWORD timeout;
DWORD exitcode;
- int ret;
- struct ChildRecord* child;
- if (pid == -1) {
- child = FindFirstChildSlot();
- }
- else {
- child = FindChildSlot(pid);
- }
- if (!child) {
- errno = ECHILD;
+ if (!GetExitCodeProcess(child->hProcess, &exitcode)) {
+ /* If an error occured, return immediatly. */
+ errno = GetLastError();
+ if (errno == ERROR_INVALID_PARAMETER) {
+ errno = ECHILD;
+ }
+ CloseChildHandle(child);
return -1;
}
+ if (exitcode != STILL_ACTIVE) {
+ /* If already died, return immediatly. */
+ pid_t pid = child->pid;
+ CloseChildHandle(child);
+ if (stat_loc) *stat_loc = exitcode << 8;
+ return pid;
+ }
+ return 0;
+}
+
+pid_t
+waitpid (pid_t pid, int *stat_loc, int options)
+{
+ DWORD timeout;
if (options == WNOHANG) {
@@ -2292,28 +2302,48 @@ waitpid (pid_t pid, int *stat_loc, int o
}
- for (;;) {
- if (!GetExitCodeProcess(child->hProcess, &exitcode)) {
- /* If an error occured, return immediatly. */
+ if (pid == -1) {
+ int count = 0;
+ DWORD ret;
+ HANDLE events[MAXCHILDNUM + 1];
+
+ FOREACH_CHILD(child) {
+ if (!child->pid || child->pid < 0) continue;
+ if ((pid = wait_child(child, stat_loc, 0))) return pid;
+ events[count++] = child->hProcess;
+ } END_FOREACH_CHILD;
+ if (!count) {
+ errno = ECHILD;
+ return -1;
+ }
+ events[count] = interrupted_event;
+
+ ret = WaitForMultipleEvents(count, events, FALSE, timeout, TRUE);
+ if (ret == WAIT_TIMEOUT) return 0;
+ if ((ret -= WAIT_OBJECT_0) == count) {
+ ResetSignal(interrupted_event);
+ errno = EINTR;
+ return -1;
+ }
+ if (ret > count) {
errno = GetLastError();
- if (errno == ERROR_INVALID_PARAMETER) {
- errno = ECHILD;
- }
- CloseChildHandle(child);
- pid = -1;
- break;
+ return -1;
}
- else if (exitcode != STILL_ACTIVE) {
- /* If already died, return immediatly. */
- pid = child->pid;
- CloseChildHandle(child);
- if (stat_loc) *stat_loc = exitcode << 8;
- break;
+
+ return wait_child(ChildRecord + ret, stat_loc, 0);
+ }
+ else {
+ struct ChildRecord* child = FindChildSlot(pid);
+ if (!child) {
+ errno = ECHILD;
+ return -1;
}
- /* wait... */
- if (wait_events(child->hProcess, timeout) != WAIT_OBJECT_0) {
- /* still active */
- pid = 0;
- break;
+ while (!(pid = wait_child(child, stat_loc, timeout))) {
+ /* wait... */
+ if (wait_events(child->hProcess, timeout) != WAIT_OBJECT_0) {
+ /* still active */
+ pid = 0;
+ break;
+ }
}
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦