From: nobu.nakada@... Date: 2003-06-27T01:03:04+09:00 Subject: [ruby-dev:20464] Re: socket.writeでBUG なかだです。 At Mon, 16 Jun 2003 17:28:30 +0900, so wrote: > ハッキリしないのですが、 > socketすでに切断され、Bad file descriptorな状態 > になっているときsocket.writeをしようとすると、 > たまに例外でなくBUGが起こることがあるという感じです。 > スレッドも絡んでいるような気がします。 すいません。時間ができたら見ようと思ってて、忘れてました。 flushやcloseの中でスレッドが切り替わった後に、他のスレッドで同 じIOがクローズされていないか確認する必要があるようです。 たぶんこんな感じ。 Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.217 diff -u -2 -p -r1.217 io.c --- io.c 23 Jun 2003 14:55:08 -0000 1.217 +++ io.c 26 Jun 2003 15:58:13 -0000 @@ -302,5 +302,7 @@ io_fflush(f, fptr) int n; - rb_thread_fd_writable(fileno(f)); + if (!rb_thread_fd_writable(fileno(f))) { + rb_io_check_closed(fptr); + } for (;;) { TRAP_BEG; @@ -1332,4 +1334,5 @@ fptr_finalize(fptr, noraise) break; } + if (!fptr->f2) break; } fptr->f2 = 0; @@ -1340,4 +1343,5 @@ fptr_finalize(fptr, noraise) if (f2 != -1 || !(fptr->mode & FMODE_WBUF)) break; if (!rb_io_wait_writable(f1)) break; + if (!fptr->f) break; } fptr->f = 0; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦