まつもと ゆきひろです

In message "[ruby-list:7437] Re: [Q] Thread"
    on 98/04/13, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

|それよりなによりlibreadlineの中でSIGVTARLMのハンドラが上書き
|されちゃってるみたいです.これではコンテキストスイッチできま
|せん.困った.

ハンドラが上書きされているせいではなくて,これはreadlineがす
ぐselectで待ってしまうためITIMER_VIRTUALがexpireしないせいの
ようです.

# そんなことってあるの? 知らんかった.

で,とりあえずは

--
static int readline_event()
{
    CHECK_INTS;
#ifdef THREAD
    if (!thread_critical) thread_schedule();
#endif
}
--
という風な定義にしておいて

--
    buff = readline(prompt);
--
のまわりのTRAP_BEG/TRAP_ENDを取り除いてから

--
    rl_event_hook = readline_event;
--
を設定すれば良いように思います.
もしかするとInit_readline()の末尾に

--
    rl_clear_signals();
--
も必要かも.
                                まつもと ゆきひろ /:|)