[#21809] lib/test/unit/ui/tk/testrunner.rb — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
こんにちは、なかむら(う)です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
[#21830] pty on FreeBSD — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21846] StringIO#path — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21876] get_last_error or getLastError by DL::Importable — Take_tk <ggb03124@...>
たけ(tk)です。
[#21883] right hand Regexp — Koji Arai <JCA02266@...>
新井です。
[#21899] core dump in rb_hash_aset — Tanaka Akira <akr@...17n.org>
% ruby -e 'h = {}
まつもと ゆきひろです
In article <1068753744.644627.6908.nullmailer@picachu.netlab.jp>,
[#21932] rough / tabs.rb — Minero Aoki <aamine@...>
青木です。
[#21939] StringIO.new("").read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21942] Zlib::GzipReader#read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21943] IO#read — Tanaka Akira <akr@...17n.org>
ふと。
In article <87u1523sjj.fsf@serein.a02.aist.go.jp>,
なかだです。
In article <200311250059.hAP0xSYw004490@sharui.nakada.kanuma.tochigi.jp>,
[#21946] Re: [ruby-cvs] ruby, ruby/lib, ruby/test/fileutils: * lib/fileutils.rb (fu_same?): check by inode instead of path name, to detect two hard links pointing to the same content. — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
Siena. です。
青木です。それにしても凄い Subject だ。
[#22000] purge pthread at configure — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22013] HTTP_PROXY — Tanaka Akira <akr@...17n.org>
ふと
[#22025] --enable-pthread on FreeBSD — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22042] ENV["path"].tainted? — Tanaka Akira <akr@...17n.org>
ENV["path"] の値が
まつもと ゆきひろです
In article <1069748137.095435.3356.nullmailer@picachu.netlab.jp>,
斜め読みですが、
まつもと ゆきひろです
In message <1070234162.951847.24883.nullmailer@picachu.netlab.jp>
[#22057] drb/drb.rb document — Minero Aoki <aamine@...>
青木です。
[#22071] Dir.glob と Shjift_JIS について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
はじめまして。山本といいます。
Siena. です。
> 山本さんのパッチがうまく当たらず手パッチしたので、念のため何度か
Siena. です。
こんにちは、山本です。
山本です。
山本です。
山本です。
山本です。glob_helperをリファクタリングしてみました。
なかだです。
山本です。
なかだです。
山本です。
Siena. です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。パッチを送ります。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
>すいません。パッチを出す時にはいつもどの時点のソースに対する
まつもと ゆきひろです
>|すみません、1.8.1に対してです。
まつもと ゆきひろです
こんにちは、山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。[ruby-dev:22470]にバグがあったので修正しました。
>山本です。[ruby-dev:22470]にバグがあったので修正しました。
まつもと ゆきひろです
山本です。
山本です。
In message <20040102230135.027CDAF8.ocean@m2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
なかだです。
山本です。
なかだです。
山本です。
[ruby-dev:21911] how to call ruby from multiple native threads
前田です。
At Wed, 12 Nov 2003 12:03:28 +0900,
Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> wrote:
> From: Tietew <tietew-ml-ruby-dev@tietew.net>
> Subject: [ruby-dev:21903] Re: pthread trouble on tcltklib
> Date: Wed, 12 Nov 2003 11:20:18 +0900
> Message-ID: <20031112111119.D6F8.TIETEW-ML-RUBY-DEV@tietew.net>
> > Windows の例ですが,Ruby が走るネイティブスレッドを一つ決め,そ
> > の上で Ruby を走らせています。そのスレッド以外で Ruby に制御は絶
> > 対に渡しません。解決不可能な問題の原因になるので。
>
> Windows での実装状況を知らないものでお尋ねします.
> tcltklib では Ruby から Tcl/Tk の機能を呼び出すのと同様に
> Tcl/Tk から Ruby の機能を呼び出すようになっているのですが,
> この Tcl/Tk からの呼び出しが,Tcl/Tk 上の複数スレッドから
> 行われた場合にはどのようになるのでしょうか.
Windowsではないですけど、mod_rubyではすべてのネイティブスレッドか
らのRuby機能の呼び出しを、キューを使ってRuby実行用のネイティブス
レッドに転送するようにしてます。
mod_rubyの現在の実装では同時に一つのスレッドの要求しか処理できな
いのですが、Ruby実行用のネイティブスレッド内で複数のRubyスレッド
を動かせば、原理的には同時に複数の要求を処理できると思います。
肝の部分だけ抜き出すとこんな感じです。
typedef VALUE (*ruby_protect_func_t)(VALUE);
typedef struct ruby_request {
ruby_interp_func_t func;
void *arg;
void *result;
int state;
int done;
apr_thread_cond_t *done_cond;
struct ruby_request *next;
} ruby_request_t;
static ruby_request_t *ruby_request_queue = NULL;
static void *ruby_thread_start(apr_thread_t *t, void *data)
{
server_rec *s = (server_rec *) data;
ruby_request_t *req;
ruby_init_interpreter(s);
while (1) {
apr_thread_mutex_lock(ruby_request_queue_mutex);
while (ruby_request_queue == NULL)
apr_thread_cond_wait(ruby_request_queue_cond,
ruby_request_queue_mutex);
req = ruby_request_queue;
if (req->func == SHUTDOWN_RUBY_THREAD)
break;
req->result =
(void *) rb_protect((ruby_protect_func_t) req->func,
(VALUE) req->arg,
&req->state);
ruby_request_queue = ruby_request_queue->next;
req->done = 1;
apr_thread_cond_signal(req->done_cond);
apr_thread_mutex_unlock(ruby_request_queue_mutex);
}
ruby_finalize_interpreter();
req->done = 1;
apr_thread_cond_signal(req->done_cond);
apr_thread_mutex_unlock(ruby_request_queue_mutex);
return NULL;
}
apr_status_t ruby_call_interpreter(pool *p, ruby_interp_func_t func,
void *arg, void **result, int *state)
{
apr_status_t status;
ruby_request_t *req;
req = apr_palloc(p, sizeof(ruby_request_t));
req->func = func;
req->arg = arg;
req->result = NULL;
req->state = 0;
req->done = 0;
status = apr_thread_cond_create(&req->done_cond, p);
if (status != APR_SUCCESS)
return status;
req->next = NULL;
apr_thread_mutex_lock(ruby_request_queue_mutex);
if (ruby_request_queue)
ruby_request_queue->next = req;
else
ruby_request_queue = req;
apr_thread_cond_signal(ruby_request_queue_cond);
while (!req->done)
apr_thread_cond_wait(req->done_cond, ruby_request_queue_mutex);
apr_thread_mutex_unlock(ruby_request_queue_mutex);
if (result)
*result = req->result;
if (state)
*state = req->state;
return APR_SUCCESS;
}
--
前田 修吾