[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>

遠藤です。

13 messages 2009/02/10

[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>

もろはしです。いつもお世話になっております。

39 messages 2009/02/14
[#38006] Re: Is URI.decode() broken? — Nobuyoshi Nakada <nobu@...> 2009/02/14

なかだです。

[#38009] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/14

成瀬です、

[#38016] Re: Is URI.decode() broken? — Fujioka <fuj@...> 2009/02/15

xibbarこと藤岡です。

[#38017] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/15

成瀬です。

[#38040] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/02/17

NARUSE, Yui さんは書きました:

[#38124] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/03/03

成瀬です。

[#39214] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/09/02

(2009年03月03日 22:45), NARUSE, Yui さんは書きました:

[#39218] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/09/02

成瀬です。

[#39236] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/05

In article <4A9E44DD.6050706@airemix.jp>,

[#39242] Re: Is URI.decode() broken? — KOSAKI Motohiro <kosaki.motohiro@...> 2009/09/07

小崎@思いつきを適当に書いてみるテスト

[#39246] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/07

In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,

[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>

nagachika と申します。

10 messages 2009/02/26

[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>

前田です。

12 messages 2009/02/27

[ruby-dev:38074] Re: build breakage with NO_WAITPID macro

From: Nobuyoshi Nakada <nobu@...>
Date: 2009-02-24 02:07:05 UTC
List: ruby-dev #38074
なかだです。

At Fri, 20 Feb 2009 01:12:24 +0900,
shinichiro.h wrote in [ruby-dev:38054]:
> NO_WAITPID が define される環境で
> process.c のコンパイルが通りません。
> 
> たぶん下記パッチでなおります。

ありがとうございます。コミットしました。

> あと、 wait_each は使われてないので
> 消してしまって良いように思います。

使われていないのが間違いのような気がします。NO_WAITPIDな環境では
Process.wait(-1)が利いてないということはありませんか。


Index: process.c
===================================================================
--- process.c	(revision 22587)
+++ process.c	(working copy)
@@ -591,4 +591,27 @@ pst_wcoredump(VALUE st)
 #define NO_WAITPID
 static st_table *pid_tbl;
+
+struct wait_data {
+    rb_pid_t pid;
+    int status;
+};
+
+static int
+wait_each(rb_pid_t pid, int status, struct wait_data *data)
+{
+    if (data->status != -1) return ST_STOP;
+
+    data->pid = pid;
+    data->status = status;
+    return ST_DELETE;
+}
+
+static int
+waitall_each(rb_pid_t pid, int status, VALUE ary)
+{
+    rb_last_status_set(status, pid);
+    rb_ary_push(ary, rb_assoc_new(PIDT2NUM(pid), rb_last_status_get()));
+    return ST_DELETE;
+}
 #else
 struct waitpid_arg {
@@ -636,11 +659,23 @@ retry:
             goto retry;
         }
-	return -1;
+	return (rb_pid_t)-1;
     }
 #else  /* NO_WAITPID */
-    if (pid_tbl && st_lookup(pid_tbl, pid, (st_data_t *)st)) {
-	rb_last_status_set(*st, pid);
-	st_delete(pid_tbl, (st_data_t*)&pid, NULL);
-	return pid;
+    if (pid_tbl) {
+	st_data_t status;
+	if (pid == (rb_pid_t)-1) {
+	    struct wait_data data;
+	    data.pid = (rb_pid_t)-1;
+	    data.status = -1;
+	    st_foreach(pid_tbl, wait_each, (st_data_t)&data);
+	    if (data.status != -1) {
+		rb_last_status_set(data.status, data.pid);
+		return data.pid;
+	    }
+	}
+	else if (st_delete(pid_tbl, (st_data_t)pid, &status)) {
+	    rb_last_status_set(*st = (int)status, pid);
+	    return pid;
+	}
     }
 
@@ -657,11 +692,11 @@ retry:
 		continue;
 	    }
-	    return -1;
+	    return (rb_pid_t)-1;
 	}
-	if (result == pid) {
+	if (result == pid || pid == (rb_pid_t)-1) {
 	    break;
 	}
 	if (!pid_tbl)
-	  pid_tbl = st_init_numtable();
+	    pid_tbl = st_init_numtable();
 	st_insert(pid_tbl, pid, (st_data_t)st);
 	if (!rb_thread_alone()) rb_thread_schedule();
@@ -674,29 +709,4 @@ retry:
 }
 
-#ifdef NO_WAITPID
-struct wait_data {
-    rb_pid_t pid;
-    int status;
-};
-
-static int
-wait_each(rb_pid_t pid, int status, struct wait_data *data)
-{
-    if (data->status != -1) return ST_STOP;
-
-    data->pid = pid;
-    data->status = status;
-    return ST_DELETE;
-}
-
-static int
-waitall_each(rb_pid_t pid, int status, VALUE ary)
-{
-    rb_last_status_set(status, pid);
-    rb_ary_push(ary, rb_assoc_new(PIDT2NUM(pid), rb_last_status_get()));
-    return ST_DELETE;
-}
-#endif
-
 
 /* [MG]:FIXME: I wasn't sure how this should be done, since ::wait()


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next