ArrayIndexOutOfBoundsException in threadsafe mode -------------------------------------------------
Key: JRUBY-5239 URL: http://jira.codehaus.org/browse/JRUBY-5239 Project: JRuby Issue Type: Bug Components: Embedding Affects Versions: JRuby 1.5.6, JRuby 1.5.3 Environment: MacOSX (1.5.3), Ubuntu 10.04(1.5.6) Reporter: Marek Jelen I have a rails application that embeds Jetty. Basically it works so, that a rake task is run to start the application. In initializers are all required jars loaded. In the rake task the Jetty server is started and custom handler is passed to it. The handler when initializes starts the rails application with Rack::Builder.parse_file("config.ru"). For each request the handler creates new environment {} and builds it according to HttpServletRequest passed to the handle, and with data from application builds HttpServletResponse. Hopefully this makes sense and will help to solve the problem. The actual problem is this: java.lang.ArrayIndexOutOfBoundsException: 2 at org.jruby.RubyArray.collect(RubyArray.java:2354) at org.jruby.RubyArray$i_method_0_0$RUBYFRAMEDINVOKER$collect.call(org/jruby/RubyArray$i_method_0_0$RUBYFRAMEDINVOKER$collect.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:299) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:117) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:122) at org.jruby.ast.CallNoArgBlockPassNode.interpret(CallNoArgBlockPassNode.java:53) at org.jruby.ast.LocalAsgnNode.interpret(LocalAsgnNode.java:123) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.ClassVarAsgnNode.interpret(ClassVarAsgnNode.java:92) at org.jruby.ast.OpAsgnOrNode.interpret(OpAsgnOrNode.java:99) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:139) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:156) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108) at org.jruby.ast.VCallNode.interpret(VCallNode.java:85) at org.jruby.ast.CallNoArgBlockPassNode.interpret(CallNoArgBlockPassNode.java:53) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:139) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:156) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:289) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:108) at org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:61) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:180) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:172) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:309) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148) at org.jruby.ast.FCallOneArgNode.interpret(FCallOneArgNode.java:36) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:98) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:180) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:172) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:309) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148) at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57) at org.jruby.ast.ToAryNode.interpret(ToAryNode.java:69) at org.jruby.ast.MultipleAsgnNode.interpret(MultipleAsgnNode.java:127) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:180) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:172) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:309) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148) at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:180) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:172) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:309) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148) at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:201) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:180) at org.jruby.RubyClass.finvoke(RubyClass.java:542) at org.jruby.RubyObject.send(RubyObject.java:1443) at org.jruby.RubyObject$i_method_multi$RUBYINVOKER$send.call(org/jruby/RubyObject$i_method_multi$RUBYINVOKER$send.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:339) at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:197) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:202) at org.jruby.ast.CallSpecialArgBlockPassNode.interpret(CallSpecialArgBlockPassNode.java:66) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:113) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:138) at org.jruby.javasupport.util.RuntimeHelpers$MethodMissingMethod.call(RuntimeHelpers.java:401) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:190) at org.jruby.runtime.callsite.CachingCallSite.callMethodMissing(CachingCallSite.java:375) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:306) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:148) at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57) at org.jruby.ast.ToAryNode.interpret(ToAryNode.java:69) at org.jruby.ast.MultipleAsgnNode.interpret(MultipleAsgnNode.java:127) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.BlockNode.interpret(BlockNode.java:71) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:113) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:127) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:147) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:279) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:68) at org.jruby.ast.CallManyArgsNode.interpret(CallManyArgsNode.java:59) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.ast.RescueNode.executeBody(RescueNode.java:199) at org.jruby.ast.RescueNode.interpretWithJavaExceptions(RescueNode.java:118) at org.jruby.ast.RescueNode.interpret(RescueNode.java:110) at org.jruby.ast.BeginNode.interpret(BeginNode.java:83) at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:113) at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:127) at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:147) at org.jruby.RubyClass.finvoke(RubyClass.java:644) at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:461) at org.jruby.javasupport.proxy.JavaProxyConstructor$2.invoke(JavaProxyConstructor.java:222) at org.jruby.proxy.org.eclipse.jetty.server.handler.AbstractHandler$Proxy0.handle(Unknown Source) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114) at org.eclipse.jetty.server.Server.handle(Server.java:352) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1049) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:590) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450) at java.lang.Thread.run(Thread.java:680) However the application works fine in development mode and I do not use my rake task, but rails command to start it with webrick. It also works fine when threadsafe! is disabled in rails. I went down through the middlewares and all of them works, however the request does not come to the Controller. From this I suppose, that the problem has to be somewhere between rails & jruby with thread save mode. These gems are used: Using rake (0.8.7) Using abstract (1.0.0) Using activesupport (3.0.3) Using builder (2.1.2) Using i18n (0.5.0) Using activemodel (3.0.3) Using erubis (2.6.6) Using rack (1.2.1) Using rack-mount (0.6.13) Using rack-test (0.5.6) Using tzinfo (0.3.23) Using actionpack (3.0.3) Using mime-types (1.16) Using polyglot (0.3.1) Using treetop (1.4.9) Using mail (2.2.12) Using actionmailer (3.0.3) Using arel (2.0.6) Using activerecord (3.0.3) Using activerecord-jdbc-adapter (1.0.3) Using jdbc-postgres (8.4.702) Using activerecord-jdbcpostgresql-adapter (1.0.3) Using activeresource (3.0.3) Using bouncy-castle-java (1.5.0145.2) Using bundler (1.0.3) Using jruby-openssl (0.7.2) Using thor (0.14.6) Using railties (3.0.3) Using rails (3.0.3) Thanks in advance for any help. Marek -- 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