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/