Thread.status == 'run' while some blocking IO ---------------------------------------------
Key: JRUBY-5238 URL: http://jira.codehaus.org/browse/JRUBY-5238 Project: JRuby Issue Type: Improvement Components: Core Classes/Modules Affects Versions: JRuby 1.5.5 Environment: jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2010-12-03 9cf97c3) (OpenJDK 64-Bit Server VM 1.6.0_20) [amd64-java] Reporter: Hiroshi Nakamura Assignee: Hiroshi Nakamura Thread.status is 'run' while blocking read/write. It should be 'sleep' though Threads of JRuby actually sleeps. (No busy loop: CPU 0%) It's just a cosmetic state management but it's the only way to check if Thread is blocking or not in Ruby. {noformat} require 'socket' require 'timeout' server = TCPServer.new('127.0.0.1', 0) port = server.addr[1] client = TCPSocket.new('127.0.0.1', port) r = Thread.new { client.read } w = Thread.new { # write enough bytes to block. client.write("foo\n" * 1000000); # JRuby on Windows does not block here. } def wait_block(t) begin timeout(2) do sleep 0.1 while t.status != 'sleep' end rescue Timeout::Error raise 'Thread is running...' end end begin wait_block(r) wait_block(w) ensure p(Thread.list - [Thread.current]) #=> sleep(read), sleep(write) end {noformat} {noformat} 0% ruby187 -v rw.rb ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] [#<Thread:0x7f766eecf298 sleep>, #<Thread:0x7f766eecf388 sleep>] 0% ruby -v rw.rb ruby 1.9.3dev (2010-11-26 trunk 29941) [x86_64-linux] [#<Thread:0x00000001a955a0 sleep>, #<Thread:0x00000001a95528 sleep>] 0% jruby -v rw.rb jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2010-12-03 9cf97c3) (OpenJDK 64-Bit Server VM 1.6.0_20) [amd64-java] bin/jruby [#<Thread:0x7219d6afrun>, #<Thread:0x7e5db5aerun>, #<Thread:0x3a42f352run>] rw.rb:25:in `wait_block': Thread is running... (RuntimeError) from rw.rb:30 1% bin/jruby -v rw.rb jruby 1.6.0.dev (ruby 1.8.7 patchlevel 249) (2010-12-04 2130381) (OpenJDK 64-Bit Server VM 1.6.0_20) [linux-amd64-java] [#<Thread:0x21719f30 sleep>, #<Thread:0x2a8a1977 sleep>] 0% {noformat} -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email