diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-02-12 05:44:23 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-02-12 05:44:23 +0000 |
commit | 58b325366dbc5c84be12fb336ee5e68f208d9365 (patch) | |
tree | e76cc28208f340b4fa1f1a126f35e5953f56e27a /test/socket | |
parent | dda8de065c1c7691ec8627d3024a61f324bc9f73 (diff) |
* 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
Diffstat (limited to 'test/socket')
-rw-r--r-- | test/socket/test_socket.rb | 20 |
1 files changed, 20 insertions, 0 deletions
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) |