From 874eca3c042a42f7bd5de245a76f79d6ff4f5dcf Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 21 May 2003 17:42:56 +0000 Subject: * eval.c (rb_thread_fd_close): raise for writing threads. [ruby-dev:20269] * io.c (rb_io_close, io_reopen): ditto. * io.c (io_reopen): keep stdio objects for stdin, stdout, and stderr. [ruby-dev:19442] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3844 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 3b8986aa8d..ffd3032907 100644 --- a/eval.c +++ b/eval.c @@ -8170,7 +8170,11 @@ rb_thread_fd_close(fd) rb_thread_t th; FOREACH_THREAD(th) { - if ((th->wait_for & WAIT_FD) && fd == th->fd) { + if (((th->wait_for & WAIT_FD) && fd == th->fd) || + ((th->wait_for & WAIT_SELECT) && (fd < th->fd) && + (FD_ISSET(fd, &th->readfds) || + FD_ISSET(fd, &th->writefds) || + FD_ISSET(fd, &th->exceptfds)))) { VALUE exc = rb_exc_new2(rb_eIOError, "stream closed"); rb_thread_raise(1, &exc, th); } -- cgit v1.2.3