From 58b325366dbc5c84be12fb336ee5e68f208d9365 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 12 Feb 2011 05:44:23 +0000 Subject: * thread.c (rb_thread_io_blocking_region): new function to run blocking region with GIL released, for fd. * thread.c (rb_thread_fd_close): implement. [ruby-core:35203] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/socket/test_socket.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'test') diff --git a/test/socket/test_socket.rb b/test/socket/test_socket.rb index 01d4652abb..b3b6fee5ef 100644 --- a/test/socket/test_socket.rb +++ b/test/socket/test_socket.rb @@ -410,4 +410,24 @@ class TestSocket < Test::Unit::TestCase assert_equal(stamp.data[-8,8].unpack("Q")[0], t.subsec * 2**64) end + def test_closed_read + require 'timeout' + require 'socket' + bug4390 = '[ruby-core:35203]' + server = TCPServer.new("localhost", 0) + serv_thread = Thread.new {server.accept} + begin sleep(0.1) end until serv_thread.stop? + sock = TCPSocket.new("localhost", server.addr[1]) + client_thread = Thread.new do + sock.readline + end + begin sleep(0.1) end until client_thread.stop? + Timeout.timeout(1) do + sock.close + sock = nil + assert_raise(IOError, bug4390) {client_thread.join} + end + ensure + server.close + end end if defined?(Socket) -- cgit v1.2.3