From: Hiroshi Nakamura Date: 2012-01-24T10:06:21+09:00 Subject: [ruby-core:42223] [ruby-trunk - Bug #5925] Lazy initialization is not thread safe. Issue #5925 has been updated by Hiroshi Nakamura. =begin I think the author expected that Hash#replace is thread-safe, and it surely is in CRuby. (see rescue for double freeze) TBLENCWWWCOMP_ = {} # :nodoc: ... def self.encode_www_form_component(str) if TBLENCWWWCOMP_.empty? tbl = {} 256.times do |i| tbl[i.chr] = '%%%02X' % i end tbl[' '] = '+' begin TBLENCWWWCOMP_.replace(tbl) TBLENCWWWCOMP_.freeze rescue end end ... Someone can rewrite this with singleton.rb. Challenger? =end ---------------------------------------- Bug #5925: Lazy initialization is not thread safe. https://bugs.ruby-lang.org/issues/5925 Author: Xu��n Baldauf Status: Open Priority: Normal Assignee: Category: lib Target version: 1.9.2 ruby -v: 1.9.3p0 Change http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/uri/common.rb?r1=26887&r2=26888& introduced lazy initialization of URI::TBLENCWWWCOMP_ . However, lazy initialization is not threadsafe. Specifically, http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/uri/common.rb?annotate=34214 line 873 contains the call TBLENCWWWCOMP_.replace(tbl) Under JRuby 1.6.4, this makes 2 threads which are simultaneously attempting to lazily initialize TBLENCWWWCOMP_ spin forever, under other VMs, the results may vary. Furthermore, the table TBLENCWWWCOMP_ will have 1025 entries, which is not really worth to delay initialization for. This bug makes Rack not threadsafe, which in turn makes Rails not threadsafe. See following JVM strack trace for further details how this can happen. ""http-bio-3000"-exec-3" daemon prio=10 tid=0x00007ff3a0007000 nid=0x7b0 runnable [0x00000000452d2000] java.lang.Thread.State: RUNNABLE at org.jruby.RubyHash.internalGetEntry(RubyHash.java:507) at org.jruby.RubyHash.op_asetForString(RubyHash.java:901) at org.jruby.RubyHash.fastASetCheckString(RubyHash.java:862) at org.jruby.RubyHash.op_aset(RubyHash.java:888) at org.jruby.RubyHash$26.visit(RubyHash.java:1625) at org.jruby.RubyHash.visitAll(RubyHash.java:594) at org.jruby.RubyHash.replaceCommon(RubyHash.java:1651) at org.jruby.RubyHash.replace(RubyHash.java:1623) at org.jruby.RubyHash$i$1$0$replace.call(RubyHash$i$1$0$replace.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.backports.uri.common_18.chained_4_rescue_2$RUBY$SYNTHETICdecode_www_form_component(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/backports/uri/common_18.rb:62) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.backports.uri.common_18.method__3$RUBY$decode_www_form_component(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/backports/uri/common_18.rb:61) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$backports$uri$common_18$method__3$RUBY$decode_www_form_component.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$backports$uri$common_18$method__3$RUBY$decode_www_form_component:65535) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:211) at org.jruby.internal.runtime.methods.CompiledMethod.call(CompiledMethod.java:260) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.utils.method__4$RUBY$unescape(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/utils.rb:37) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape:65535) at org.jruby.internal.runtime.methods.WrapperMethod.call(WrapperMethod.java:58) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.adapter.rails.method__4$RUBY$file_exist_p_(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/adapter/rails.rb:27) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_:65535) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.adapter.rails.method__7$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/adapter/rails.rb:46) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.jruby.rack.rails.method__30$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/jruby/rack/rails.rb:186) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.handler.servlet.method__4$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/handler/servlet.rb:19) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call:65535) at org.jruby.RubyClass.finvoke(RubyClass.java:686) at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:548) at org.jruby.RubyBasicObject.callMethod(RubyBasicObject.java:358) at org.jruby.javasupport.JavaEmbedUtils$1.callMethod(JavaEmbedUtils.java:143) at org.jruby.rack.DefaultRackApplication.__call(DefaultRackApplication.java:66) at org.jruby.rack.DefaultRackApplication.call(DefaultRackApplication.java:40) at org.jruby.rack.AbstractRackDispatcher.process(AbstractRackDispatcher.java:29) at org.jruby.rack.AbstractServlet.service(AbstractServlet.java:35) at org.jruby.rack.AbstractServlet.service(AbstractServlet.java:42) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) - locked <0x00007ff3d293d2e0> (a org.apache.tomcat.util.net.SocketWrapper) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ""http-bio-3000"-exec-2" daemon prio=10 tid=0x00007ff3ac9b2800 nid=0x7af waiting on condition [0x00000000450d3000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00007ff3d2ad16b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:662) ""http-bio-3000"-exec-1" daemon prio=10 tid=0x00007ff3adba5800 nid=0x7ae runnable [0x0000000044ed0000] java.lang.Thread.State: RUNNABLE at org.jruby.RubyHash.internalGetEntry(RubyHash.java:507) at org.jruby.RubyHash.op_asetForString(RubyHash.java:901) at org.jruby.RubyHash.fastASetCheckString(RubyHash.java:862) at org.jruby.RubyHash.op_aset(RubyHash.java:888) at org.jruby.RubyHash$26.visit(RubyHash.java:1625) at org.jruby.RubyHash.visitAll(RubyHash.java:594) at org.jruby.RubyHash.replaceCommon(RubyHash.java:1651) at org.jruby.RubyHash.replace(RubyHash.java:1623) at org.jruby.RubyHash$i$1$0$replace.call(RubyHash$i$1$0$replace.gen:65535) at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.backports.uri.common_18.chained_4_rescue_2$RUBY$SYNTHETICdecode_www_form_component(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/backports/uri/common_18.rb:62) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.backports.uri.common_18.method__3$RUBY$decode_www_form_component(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/backports/uri/common_18.rb:61) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$backports$uri$common_18$method__3$RUBY$decode_www_form_component.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$backports$uri$common_18$method__3$RUBY$decode_www_form_component:65535) at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:211) at org.jruby.internal.runtime.methods.CompiledMethod.call(CompiledMethod.java:260) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.vendor.rack_minus_1_dot_3_dot_5.rack.utils.method__4$RUBY$unescape(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/vendor/rack-1.3.5/rack/utils.rb:37) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$vendor$rack_minus_1_dot_3_dot_5$rack$utils$method__4$RUBY$unescape:65535) at org.jruby.internal.runtime.methods.WrapperMethod.call(WrapperMethod.java:58) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.adapter.rails.method__4$RUBY$file_exist_p_(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/adapter/rails.rb:27) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__4$RUBY$file_exist_p_:65535) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.adapter.rails.method__7$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/adapter/rails.rb:46) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$adapter$rails$method__7$RUBY$call:65535) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.jruby.rack.rails.method__30$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/jruby/rack/rails.rb:186) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$jruby$rack$rails$method__30$RUBY$call:65535) at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:167) at home.user.$_dot_rvm.gems.jruby_minus_1_dot_6_dot_4.gems.jruby_minus_rack_minus_1_dot_1_dot_1.lib.jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar.rack.handler.servlet.method__4$RUBY$call(file:/home/user/.rvm/gems/jruby-1.6.4/gems/jruby-rack-1.1.1/lib/jruby-rack-1.1.1.jar!/rack/handler/servlet.rb:19) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call:65535) at home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call.call(home$user$$_dot_rvm$gems$jruby_minus_1_dot_6_dot_4$gems$jruby_minus_rack_minus_1_dot_1_dot_1$lib$jruby_minus_rack_minus_1_dot_1_dot_1_dot_jar$rack$handler$servlet$method__4$RUBY$call:65535) at org.jruby.RubyClass.finvoke(RubyClass.java:686) at org.jruby.javasupport.util.RuntimeHelpers.invoke(RuntimeHelpers.java:548) at org.jruby.RubyBasicObject.callMethod(RubyBasicObject.java:358) at org.jruby.javasupport.JavaEmbedUtils$1.callMethod(JavaEmbedUtils.java:143) at org.jruby.rack.DefaultRackApplication.__call(DefaultRackApplication.java:66) at org.jruby.rack.DefaultRackApplication.call(DefaultRackApplication.java:40) at org.jruby.rack.AbstractRackDispatcher.process(AbstractRackDispatcher.java:29) at org.jruby.rack.AbstractServlet.service(AbstractServlet.java:35) at org.jruby.rack.AbstractServlet.service(AbstractServlet.java:42) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) - locked <0x00007ff3d28c3118> (a org.apache.tomcat.util.net.SocketWrapper) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) -- http://bugs.ruby-lang.org/