I'm porting my socket+send/recv patch to work with jruby 0.8.3 but there
seems to be a bug in the vanilla jruby 0.8.3 socket implementation. 
"read" (I haven't tried write...) returns something (instead of blocking)
which when accessed crashes the interpreter.  Since the IO code seems to
have changed minimally, this probably has to do with some IO code *not*
being updated to reflect changes made elsewhere.

I really am the only one using JRuby sockets, aren't I?  Its going to be
impossible to implement the *whole* socket interface, as a lot of the Ruby
socket implementation reflects C's socket implementation.  As long as I'm
messing around with sockets, though, I could probably get a bigger user
base by implementing whatever it is that rails needs to use the native sql
connector code.  Does anyone know what that is?  Maybe I'll just look
through the code.

Anyway, I'm looking into this, but any help would be appreciated.

   To reproduce:

require 'socket'
s = TCPSocket.new('www.google.com', 80)

string = s.read(10)

$stderr.puts "Still haven't crashed"

puts string

   This produces:

Still haven't crashed
org.jruby.RubyIO.puts(RubyIO.java:777): java.lang.NullPointerException:
null (NativeException)
        from org.jruby.RubyKernel.puts(RubyKernel.java:253)
        from sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        from
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        from
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        from java.lang.reflect.Method.invoke(Method.java:324)
        from
org.jruby.runtime.callback.ReflectionCallback.execute(ReflectionCallback.java:140)
        from
org.jruby.internal.runtime.methods.CallbackMethod.internalCall(CallbackMethod.java:79)
        from
org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:51)
         ... 25 levels...
        from org.jruby.Main.runInterpreter(Main.java:121)
        from org.jruby.Main.main(Main.java:82)
        from breakme.rb:8
Complete Java stackTrace
java.lang.NullPointerException
        at org.jruby.RubyIO.puts(RubyIO.java:777)
        at org.jruby.RubyKernel.puts(RubyKernel.java:253)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.jruby.runtime.callback.ReflectionCallback.execute(ReflectionCallback.java:140)
        at
org.jruby.internal.runtime.methods.CallbackMethod.internalCall(CallbackMethod.java:79)
        at
org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:51)
        at org.jruby.RubyObject.callMethod(RubyObject.java:361)
        at org.jruby.RubyObject.callMethod(RubyObject.java:315)
        at
org.jruby.evaluator.EvaluateVisitor$FCallNodeVisitor.execute(EvaluateVisitor.java:1028)
        at
org.jruby.evaluator.EvaluationState.executeNext(EvaluationState.java:211)
        at
org.jruby.evaluator.EvaluationState.begin(EvaluationState.java:291)
        at org.jruby.Ruby.eval(Ruby.java:188)
        at org.jruby.Main.runInterpreter(Main.java:152)
        at org.jruby.Main.runInterpreter(Main.java:121)
        at org.jruby.Main.main(Main.java:82)




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642
_______________________________________________
Jruby-devel mailing list
Jruby-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jruby-devel

Reply via email to