Skip to content

Instantly share code, notes, and snippets.

@jsvd
Last active September 9, 2019 11:12
Show Gist options
  • Save jsvd/0a70cd10bde29f51885733e9fb2967df to your computer and use it in GitHub Desktop.
Save jsvd/0a70cd10bde29f51885733e9fb2967df to your computer and use it in GitHub Desktop.
% gem list | grep jrjackson
jrjackson (0.4.9 java, 0.4.8 java, 0.4.7 java)
% ruby -v
jruby 9.2.5.0 (2.5.0) 2018-12-06 6d5a228 OpenJDK 64-Bit Server VM 11.0.1+13 on 11.0.1+13 +jit [darwin-x86_64]
require 'jrjackson'
Thread.abort_on_exception = true
now = Time.now
# we need multi threading to trigger this issue
num_threads = 100
threads = num_threads.times.map do |i|
Thread.new do
# this is OK:
# loop { JrJackson::Json.dump(now) }
# but this causes exception shown below:
loop { JrJackson::Json.dump("a" => now) }
end
end
threads.each(&:join)
% ruby jrjackon_exception.rb
warning: thread "Ruby-0-Thread-69: jrjackon_exception.rb:1" terminated with exception (report_on_exception is true):
java.lang.ArrayIndexOutOfBoundsException: Index 964 out of bounds for length 13
at java.base/sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate(BaseCalendar.java:453)
at java.base/java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2394)
at java.base/java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2309)
at java.base/java.util.Calendar.setTimeInMillis(Calendar.java:1834)
at java.base/java.util.Calendar.setTime(Calendar.java:1800)
at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:974)
at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:967)
at java.base/java.text.DateFormat.format(DateFormat.java:374)
at com.jrjackson.RubyAnySerializer.serializeTime(RubyAnySerializer.java:244)
at com.jrjackson.RubyAnySerializer.serialize(RubyAnySerializer.java:196)
at com.jrjackson.RubyAnySerializer.serializeHash(RubyAnySerializer.java:226)
at com.jrjackson.RubyAnySerializer.serialize(RubyAnySerializer.java:162)
at com.jrjackson.JrJacksonBase.generate(JrJacksonBase.java:70)
at com.jrjackson.JrJacksonBase$INVOKER$s$0$1$generate.call(JrJacksonBase$INVOKER$s$0$1$generate.gen)
at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodN.call(JavaMethod.java:801)
at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:207)
at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:201)
at Users.joaoduarte.$_dot_rvm.gems.jruby_minus_9_dot_2_dot_5_dot_0.gems.jrjackson_minus_0_dot_4_dot_9_minus_java.lib.jrjackson.jrjackson.invokeOther27:generate(/Users/joaoduarte/.rvm/gems/jruby-9.2.5.0/gems/jrjackson-0.4.9-java/lib/jrjackson/jrjackson.rb:61)
at Users.joaoduarte.$_dot_rvm.gems.jruby_minus_9_dot_2_dot_5_dot_0.gems.jrjackson_minus_0_dot_4_dot_9_minus_java.lib.jrjackson.jrjackson.RUBY$method$dump$0(/Users/joaoduarte/.rvm/gems/jruby-9.2.5.0/gems/jrjackson-0.4.9-java/lib/jrjackson/jrjackson.rb:61)
at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:91)
at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:114)
at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:156)
at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:199)
at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
at jrjackon_exception.invokeOther1:dump(jrjackon_exception.rb:9)
at jrjackon_exception.RUBY$block$\=jrjackon_exception\,rb$2(jrjackon_exception.rb:9)
at org.jruby.runtime.CompiledIRBlockBody.yieldDirect(CompiledIRBlockBody.java:146)
at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:85)
at org.jruby.runtime.Block.yieldSpecific(Block.java:134)
at org.jruby.RubyKernel.loop(RubyKernel.java:1415)
at org.jruby.RubyKernel$INVOKER$s$0$0$loop.call(RubyKernel$INVOKER$s$0$0$loop.gen)
at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:149)
at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:158)
at jrjackon_exception.invokeOther3:loop(jrjackon_exception.rb:9)
at jrjackon_exception.RUBY$block$\=jrjackon_exception\,rb$1(jrjackon_exception.rb:9)
at org.jruby.runtime.CompiledIRBlockBody.callDirect(CompiledIRBlockBody.java:136)
at org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:77)
at org.jruby.runtime.Block.call(Block.java:124)
at org.jruby.RubyProc.call(RubyProc.java:286)
at org.jruby.RubyProc.call(RubyProc.java:270)
at org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:105)
at java.base/java.lang.Thread.run(Thread.java:834)
Unhandled Java exception: java.lang.ArrayIndexOutOfBoundsException: Index 964 out of bounds for length 13
java.lang.ArrayIndexOutOfBoundsException: Index 964 out of bounds for length 13
getCalendarDateFromFixedDate at sun/util/calendar/BaseCalendar.java:453
computeFields at java/util/GregorianCalendar.java:2394
computeFields at java/util/GregorianCalendar.java:2309
setTimeInMillis at java/util/Calendar.java:1834
setTime at java/util/Calendar.java:1800
format at java/text/SimpleDateFormat.java:974
format at java/text/SimpleDateFormat.java:967
format at java/text/DateFormat.java:374
serializeTime at com/jrjackson/RubyAnySerializer.java:244
serialize at com/jrjackson/RubyAnySerializer.java:196
serializeHash at com/jrjackson/RubyAnySerializer.java:226
serialize at com/jrjackson/RubyAnySerializer.java:162
generate at com/jrjackson/JrJacksonBase.java:70
call at com/jrjackson/JrJacksonBase$INVOKER$s$0$1$generate.gen:-1
call at org/jruby/internal/runtime/methods/JavaMethod.java:801
call at org/jruby/internal/runtime/methods/DynamicMethod.java:207
call at org/jruby/runtime/callsite/CachingCallSite.java:201
invokeOther27:generate at Users/joaoduarte/$_dot_rvm/gems/jruby_minus_9_dot_2_dot_5_dot_0/gems/jrjackson_minus_0_dot_4_dot_9_minus_java/lib/jrjackson//Users/joaoduarte/.rvm/gems/jruby-9.2.5.0/gems/jrjackson-0.4.9-java/lib/jrjackson/jrjackson.rb:61
dump at /Users/joaoduarte/.rvm/gems/jruby-9.2.5.0/gems/jrjackson-0.4.9-java/lib/jrjackson/jrjackson.rb:61
call at org/jruby/internal/runtime/methods/CompiledIRMethod.java:91
call at org/jruby/internal/runtime/methods/CompiledIRMethod.java:114
call at org/jruby/internal/runtime/methods/MixedModeIRMethod.java:156
call at org/jruby/internal/runtime/methods/DynamicMethod.java:199
call at org/jruby/runtime/callsite/CachingCallSite.java:170
invokeOther1:dump at jrjackon_exception.rb:9
jrjackon_exception.rb at jrjackon_exception.rb:9
yieldDirect at org/jruby/runtime/CompiledIRBlockBody.java:146
yieldSpecific at org/jruby/runtime/IRBlockBody.java:85
yieldSpecific at org/jruby/runtime/Block.java:134
loop at org/jruby/RubyKernel.java:1415
call at org/jruby/RubyKernel$INVOKER$s$0$0$loop.gen:-1
call at org/jruby/runtime/callsite/CachingCallSite.java:149
callIter at org/jruby/runtime/callsite/CachingCallSite.java:158
invokeOther3:loop at jrjackon_exception.rb:9
jrjackon_exception.rb at jrjackon_exception.rb:9
callDirect at org/jruby/runtime/CompiledIRBlockBody.java:136
call at org/jruby/runtime/IRBlockBody.java:77
call at org/jruby/runtime/Block.java:124
call at org/jruby/RubyProc.java:286
call at org/jruby/RubyProc.java:270
run at org/jruby/internal/runtime/RubyRunnable.java:105
run at java/lang/Thread.java:834
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment