summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-18 06:59:54 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-18 06:59:54 +0000
commitb9d4e5e742af6ee333bb7ec23d1975a94e3d4254 (patch)
treea6d22f0af009919261b2055ead0083b7c98cf6de /process.c
parent2e752da616efd57083dbac93b4b6b2347e42a65c (diff)
* process.c (detach_process_watcher): should not pass the pointer
to an auto variable to the thread to be created. pointed and fix by KUBO Takehiro <kubo at jiubao.org> [ruby-dev:30618] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/process.c b/process.c
index 7df42393c6..bd1e5cea53 100644
--- a/process.c
+++ b/process.c
@@ -848,23 +848,22 @@ proc_waitall()
}
static VALUE
-detach_process_watcher(pid_p)
- int *pid_p;
+detach_process_watcher(arg)
+ void *arg;
{
- int cpid, status;
+ int pid = (int)arg, status;
- for (;;) {
- cpid = rb_waitpid(*pid_p, &status, WNOHANG);
- if (cpid != 0) return Qnil;
+ while (rb_waitpid(pid, &status, WNOHANG) == 0) {
rb_thread_sleep(1);
}
+ return Qnil;
}
VALUE
rb_detach_process(pid)
int pid;
{
- return rb_thread_create(detach_process_watcher, (void*)&pid);
+ return rb_thread_create(detach_process_watcher, (void*)pid);
}