From: Shugo Maeda Date: 1999-06-04T15:17:39+09:00 Subject: [ruby-dev:7079] Marshal::load 前田です。 Marshal::loadでIOがブロックした時に、スレッドのスケジューリングが 起こらないためにデッドロックしてしまいます。 こんな感じでいかがでしょう? --- marshal.c.orig Fri Jun 4 15:06:23 1999 +++ marshal.c Fri Jun 4 15:07:06 1999 @@ -457,7 +457,10 @@ r_byte(arg) struct load_arg *arg; { - if (arg->fp) return getc(arg->fp); + if (arg->fp) { + rb_thread_wait_fd(fileno(arg->fp)); + return getc(arg->fp); + } if (arg->ptr < arg->end) return *(unsigned char*)arg->ptr++; return EOF; } @@ -531,6 +534,7 @@ struct load_arg *arg; { if (arg->fp) { + rb_thread_wait_fd(fileno(arg->fp)); len = fread(s, 1, len, arg->fp); } else { # ほんとはwriteの時も要るかも。 -- 前田 修吾