BasicSocket#close_read and #close_write not working
---------------------------------------------------
Key: JRUBY-2672
URL: http://jira.codehaus.org/browse/JRUBY-2672
Project: JRuby
Issue Type: Bug
Components: Core Classes/Modules
Environment: Mac OS 10.5.3
Reporter: Federico Builes
The following's a sample jirb session to try out #close_read:
{noformat}
$ jirb
irb(main):001:0> require 'socket'
require 'socket'
=> true
irb(main):002:0> s = TCPServer.new(2345)
s = TCPServer.new(2345)
=> #<TCPServer:0x88c838>
irb(main):003:0> s.close_read
s.close_read
=> #<TCPServer:0x88c838>
irb(main):004:0> s.closed?
s.closed?
=> false
irb(main):005:0> s.close
s.close
Errno::EBADF: Bad file descriptor - Bad file descriptor
{noformat}
The situation with #close_write is a bit longer:
{noformat}
$ jirb
irb(main):001:0> require 'socket'
require 'socket'
=> true
irb(main):002:0> s = TCPServer.new(2345)
s = TCPServer.new(2345)
=> #<TCPServer:0x88c838>
irb(main):003:0> s.close_write
s.close_write
Exception in thread "main" java.lang.ClassCastException:
sun.nio.ch.ServerSocketChannelImpl
at
org.jruby.ext.socket.RubyBasicSocket.close_write(RubyBasicSocket.java:94)
at org.jruby.RubyIOInvoker$close_write_method_0_0.call(Unknown Source)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:121)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:326)
at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:57)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.RootNode.interpret(RootNode.java:126)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.evaluator.ASTInterpreter.evalWithBinding(ASTInterpreter.java:140)
at org.jruby.RubyKernel.eval(RubyKernel.java:813)
at org.jruby.RubyKernelInvoker$eval_s_method_0_3.call(Unknown Source)
at
org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:66)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:293)
at org.jruby.ast.FCallNode.interpret(FCallNode.java:164)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:204)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:293)
at org.jruby.ast.CallNode.interpret(CallNode.java:177)
at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:43)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:309)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:383)
at org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.ast.RescueNode.interpret(RescueNode.java:109)
at org.jruby.ast.BeginNode.interpret(BeginNode.java:80)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:206)
at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:192)
at org.jruby.runtime.Block.yield(Block.java:103)
at org.jruby.ast.YieldNode.interpret(YieldNode.java:95)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:93)
at org.jruby.ast.BeginNode.interpret(BeginNode.java:80)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:288)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:365)
at
org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:38)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:206)
at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:192)
at org.jruby.runtime.Block.yield(Block.java:103)
at org.jruby.ast.YieldNode.interpret(YieldNode.java:95)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.IfNode.interpret(IfNode.java:108)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.ast.RescueNode.interpret(RescueNode.java:109)
at org.jruby.ast.BeginNode.interpret(BeginNode.java:80)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:206)
at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:153)
at org.jruby.runtime.Block.yield(Block.java:98)
at org.jruby.RubyKernel.loop(RubyKernel.java:1000)
at org.jruby.RubyKernelInvoker$loop_s_method_0_0.call(Unknown Source)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:135)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:338)
at
org.jruby.ast.FCallNoArgBlockNode.interpret(FCallNoArgBlockNode.java:38)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:206)
at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:153)
at org.jruby.runtime.Block.yield(Block.java:98)
at org.jruby.RubyKernel.rbCatch(RubyKernel.java:841)
at org.jruby.RubyKernelInvoker$rbCatch_s_method_1_0.call(Unknown Source)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:163)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:368)
at
org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:38)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:246)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:135)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:338)
at
org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:225)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:121)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:326)
at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:57)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.runtime.InterpretedBlock.evalBlockBody(InterpretedBlock.java:206)
at org.jruby.runtime.InterpretedBlock.yield(InterpretedBlock.java:153)
at org.jruby.runtime.Block.yield(Block.java:98)
at org.jruby.RubyKernel.rbCatch(RubyKernel.java:841)
at org.jruby.RubyKernelInvoker$rbCatch_s_method_1_0.call(Unknown Source)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:163)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:368)
at
org.jruby.ast.FCallOneArgBlockNode.interpret(FCallOneArgBlockNode.java:38)
at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:99)
at org.jruby.ast.BlockNode.interpret(BlockNode.java:67)
at org.jruby.evaluator.ASTInterpreter.eval(ASTInterpreter.java:87)
at
org.jruby.internal.runtime.methods.DefaultMethod.interpretedCall(DefaultMethod.java:174)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:150)
at
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:267)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.cacheAndCall(CallSite.java:149)
at
org.jruby.runtime.CallSite$InlineCachingCallSite.call(CallSite.java:356)
at
ruby.Users.federicobuiles.programacion.jruby.bin.jirb.__file__(/Users/federicobuiles/programacion/jruby/bin/jirb:19)
at
ruby.Users.federicobuiles.programacion.jruby.bin.jirb.__file__(/Users/federicobuiles/programacion/jruby/bin/jirb)
at
ruby.Users.federicobuiles.programacion.jruby.bin.jirb.load(/Users/federicobuiles/programacion/jruby/bin/jirb)
at org.jruby.Ruby.runScript(Ruby.java:520)
at org.jruby.Ruby.runNormally(Ruby.java:440)
at org.jruby.Ruby.runFromMain(Ruby.java:320)
at org.jruby.Main.run(Main.java:184)
at org.jruby.Main.run(Main.java:91)
at org.jruby.Main.main(Main.java:82)
{noformat}
Both of these cases are included in Rubyspec in:
/spec/ruby/1.8/library/socket/basicsocket/close_{read|write}_spec.rb in case
you want to try this out.
--
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