From: Masaki Fukushima Date: 2000-05-17T02:08:09+09:00 Subject: [ruby-dev:9721] Re: busy loop in `waitpid' 福嶋です。 matz@netlab.co.jp (Yukihiro Matsumoto) wrote: > 昨日、syswriteとselectは対応しました。が、waitpidとflockは結 selectの引数を省略すると落ちます。 とりあえず、チェックを入れてみました。 Index: eval.c =================================================================== RCS file: /home/fukusima/src/ruby/CVSup/cvs/ruby/eval.c,v retrieving revision 1.45 diff -u -r1.45 eval.c --- eval.c 2000/05/16 02:46:51 1.45 +++ eval.c 2000/05/16 17:00:05 @@ -7013,9 +7013,12 @@ } curr_thread->status = THREAD_STOPPED; - curr_thread->readfds = *read; - curr_thread->writefds = *write; - curr_thread->exceptfds = *except; + if (read) curr_thread->readfds = *read; + else FD_ZERO(&curr_thread->readfds); + if (write) curr_thread->writefds = *write; + else FD_ZERO(&curr_thread->writefds); + if (except) curr_thread->exceptfds = *except; + else FD_ZERO(&curr_thread->exceptfds); curr_thread->fd = max; curr_thread->wait_for = WAIT_SELECT; if (timeout) { @@ -7024,9 +7027,9 @@ curr_thread->wait_for |= WAIT_TIME; } rb_thread_schedule(); - *read = curr_thread->readfds; - *write = curr_thread->writefds; - *except = curr_thread->exceptfds; + if (read) *read = curr_thread->readfds; + if (write) *write = curr_thread->writefds; + if (except) *except = curr_thread->exceptfds; return curr_thread->fd; } --- 福嶋正機