BSON C Extension causes jRuby to segfault
-----------------------------------------
Key: JRUBY-5182
URL: http://jira.codehaus.org/browse/JRUBY-5182
Project: JRuby
Issue Type: Bug
Components: C Extensions
Affects Versions: JRuby 1.6
Environment: Mac OS X
Reporter: Eric Lubow
Assignee: Thomas E Enebo
The BSON C extension doesn't appear to work in jRuby 1.6-HEAD.
## Code
require 'rubygems'
require 'mongo'
require 'benchmark'
database = Mongo::Connection.new('localhost',
27017).db("simplereach_website_development")
100_000.times { database['live_ads'].find({}).to_a }
Benchmark.bm do |x|
x.report("parse:") { database['live_ads'].find({}).to_a }
end
## Changes to bson-1.1.2/lib/bson.rb to force use of BSON C extension by Mongo
Ruby Driver
-- 35 if RUBY_PLATFORM =~ /java/
++ 35 if false
36 jar_dir = File.join(File.dirname(__FILE__), '..', 'ext', 'java', 'jar')
37 require File.join(jar_dir, 'mongo-2.2.jar')
## Compile Mode FORCE
elu...@beacon bson_ext$ jruby -J-Djruby.compile.mode=FORCE -S find.rb
calling init (1027b4540)
JRuby.java:70:in `callRubyMethod0': java.lang.NullPointerException
from Native.java:-2:in `callMethod1'
from NativeMethod1.java:48:in `call'
from WrapperMethod.java:58:in `call'
from CachingCallSite.java:150:in `call'
from bson_c.rb:28:in `method__3$RUBY$deserialize'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_bson_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_bson_bson_cInvokermethod__3$RUBY$deserializeOpt#deserialize:65535:in
`call'
from DynamicMethod.java:192:in `call'
from CompiledMethod.java:218:in `call'
from CachingCallSite.java:150:in `call'
from connection.rb:816:in `method__56$RUBY$read_documents'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_connectionInvokermethod__56$RUBY$read_documentsFixed3#read_documents:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_connectionInvokermethod__56$RUBY$read_documentsFixed3#read_documents:65535:in
`call'
from CachingCallSite.java:230:in `call'
from connection.rb:761:in `method__51$RUBY$receive'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_connectionInvokermethod__51$RUBY$receiveFixed1#receive:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_connectionInvokermethod__51$RUBY$receiveFixed1#receive:65535:in
`call'
from CachingCallSite.java:150:in `call'
from connection.rb:466:in `block_10$RUBY$__block__'
from null:65535:in `call'
from CompiledBlock.java:115:in `yield'
from CompiledBlock.java:98:in `yield'
from Block.java:194:in `yield'
from ThreadLibrary.java:196:in `synchronize'
from
org/jruby/libraries/ThreadLibrary$Mutex$i_method_0_0$RUBYINVOKER$synchronize.gen:65535:in
`call'
from CachingCallSite.java:119:in `callBlock'
from CachingCallSite.java:136:in `callIter'
from connection.rb:464:in `ensure_3$RUBY$__ensure___27'
from connection.rb:460:in `method__26$RUBY$receive_message'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_connectionInvokermethod__26$RUBY$receive_messageOpt#receive_message:65535:in
`call'
from DynamicMethod.java:162:in `call'
from CachingCallSite.java:70:in `call'
from cursor.rb:371:in `method__22$RUBY$send_initial_query'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__22$RUBY$send_initial_queryFixed0#send_initial_query:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__22$RUBY$send_initial_queryFixed0#send_initial_query:65535:in
`call'
from CachingCallSite.java:110:in `call'
from cursor.rb:337:in `method__21$RUBY$refresh'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__21$RUBY$refreshFixed0#refresh:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__21$RUBY$refreshFixed0#refresh:65535:in
`call'
from CachingCallSite.java:110:in `call'
from cursor.rb:66:in `method__3$RUBY$next_document'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__3$RUBY$next_documentFixed0#next_document:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__3$RUBY$next_documentFixed0#next_document:65535:in
`call'
from CachingCallSite.java:110:in `call'
from cursor.rb:218:in `method__11$RUBY$each'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__11$RUBY$eachFixed0#each:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__11$RUBY$eachFixed0#each:65535:in
`call'
from RubyClass.java:540:in `finvoke'
from RuntimeHelpers.java:450:in `invoke'
from RubyEnumerable.java:360:in `to_a'
from
org/jruby/RubyEnumerable$s_method_multi$RUBYINVOKER$to_a.gen:65535:in `call'
from JavaMethod.java:642:in `call'
from SuperCallSite.java:68:in `callBlock'
from SuperCallSite.java:75:in `call'
from cursor.rb:236:in `method__12$RUBY$to_a'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__12$RUBY$to_aFixed0#to_a:65535:in
`call'
from
Users_elubow_$_dot_rvm_gems_jruby_minus_head_40_bson_ext_minus_bm_gems_mongo_minus_1_dot_1_dot_2_lib_$_dot_dot__lib_mongo_cursorInvokermethod__12$RUBY$to_aFixed0#to_a:65535:in
`call'
from CachingCallSite.java:110:in `call'
from find.rb:7:in `block_0$RUBY$__block__'
from null:65535:in `call'
from CompiledBlock.java:115:in `yield'
from CompiledBlock.java:98:in `yield'
from Block.java:194:in `yield'
from RubyFixnum.java:250:in `times'
from
org/jruby/RubyInteger$i_method_0_0$RUBYFRAMEDINVOKER$times.gen:65535:in `call'
from CachingCallSite.java:303:in `cacheAndCall'
from CachingCallSite.java:121:in `callBlock'
from CachingCallSite.java:136:in `callIter'
from find.rb:7:in `__file__'
from find.rb:-1:in `load'
from Ruby.java:686:in `runScript'
from Ruby.java:569:in `runNormally'
from Ruby.java:412:in `runFromMain'
from Main.java:304:in `run'
from Main.java:144:in `run'
from Main.java:113:in `main'
## Error compile mode
elu...@beacon bson_ext$ jruby -J-Djruby.compile.mode=OFF -S find.rb
calling init (12e7e6540)
JRuby.java:70:in `callRubyMethod0': java.lang.NullPointerException
from Native.java:-2:in `callMethod1'
from NativeMethod1.java:48:in `call'
from WrapperMethod.java:58:in `call'
from CachingCallSite.java:150:in `call'
from bson_c.rb:28:in `__file__'
from bson_c.rb:-1:in `__file__'
from AbstractScript.java:39:in `__file__'
from JittedMethod.java:153:in `call'
from CachingCallSite.java:150:in `call'
from CallOneArgNode.java:57:in `interpret'
from CallOneArgNode.java:57:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from WhileNode.java:131:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from InterpretedMethod.java:262:in `call'
from DefaultMethod.java:206:in `call'
from CachingCallSite.java:230:in `call'
from FCallThreeArgNode.java:40:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from InterpretedMethod.java:180:in `call'
from DefaultMethod.java:174:in `call'
from CachingCallSite.java:150:in `call'
from FCallOneArgNode.java:36:in `interpret'
from LocalAsgnNode.java:123:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from InterpretedBlock.java:373:in `evalBlockBody'
from InterpretedBlock.java:346:in `yield'
from InterpretedBlock.java:303:in `yield'
from Block.java:194:in `yield'
from ThreadLibrary.java:196:in `synchronize'
from
org/jruby/libraries/ThreadLibrary$Mutex$i_method_0_0$RUBYINVOKER$synchronize.gen:65535:in
`call'
from CachingCallSite.java:119:in `callBlock'
from CachingCallSite.java:126:in `call'
from CallNoArgBlockNode.java:64:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from EnsureNode.java:96:in `interpret'
from BeginNode.java:83:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from InterpretedMethod.java:113:in `call'
from InterpretedMethod.java:127:in `call'
from DefaultMethod.java:149:in `call'
from CachingCallSite.java:70:in `call'
from CallManyArgsNode.java:59:in `interpret'
from ToAryNode.java:69:in `interpret'
from MultipleAsgnNode.java:127:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from IfNode.java:119:in `interpret'
from NewlineNode.java:104:in `interpret'
from InterpretedMethod.java:139:in `call'
from DefaultMethod.java:158:in `call'
from CachingCallSite.java:110:in `call'
from VCallNode.java:85:in `interpret'
from OrNode.java:94:in `interpret'
from IfNode.java:111:in `interpret'
from NewlineNode.java:104:in `interpret'
from BlockNode.java:71:in `interpret'
from InterpretedMethod.java:139:in `call'
from DefaultMethod.java:158:in `call'
from CachingCallSite.java:110:in `call'
from cursor.rb:66:in `__file__'
from cursor.rb:-1:in `__file__'
from JittedMethod.java:119:in `call'
from CachingCallSite.java:110:in `call'
from VCallNode.java:85:in `interpret'
from LocalAsgnNode.java:123:in `interpret'
from WhileNode.java:127:in `interpret'
from NewlineNode.java:104:in `interpret'
from InterpretedMethod.java:113:in `call'
from DefaultMethod.java:140:in `call'
from RubyClass.java:540:in `finvoke'
from RuntimeHelpers.java:450:in `invoke'
from RubyEnumerable.java:360:in `to_a'
from
org/jruby/RubyEnumerable$s_method_multi$RUBYINVOKER$to_a.gen:65535:in `call'
from JavaMethod.java:642:in `call'
from SuperCallSite.java:68:in `callBlock'
from SuperCallSite.java:75:in `call'
from ZSuperNode.java:100:in `interpret'
from NewlineNode.java:104:in `interpret'
from InterpretedMethod.java:139:in `call'
from DefaultMethod.java:158:in `call'
from CachingCallSite.java:110:in `call'
from find.rb:7:in `block_0$RUBY$__block__'
from null:65535:in `call'
from CompiledBlock.java:115:in `yield'
from CompiledBlock.java:98:in `yield'
from Block.java:194:in `yield'
from RubyFixnum.java:250:in `times'
from
org/jruby/RubyInteger$i_method_0_0$RUBYFRAMEDINVOKER$times.gen:65535:in `call'
from CachingCallSite.java:303:in `cacheAndCall'
from CachingCallSite.java:121:in `callBlock'
from CachingCallSite.java:136:in `callIter'
from find.rb:7:in `__file__'
from find.rb:-1:in `load'
from Ruby.java:686:in `runScript'
from Ruby.java:569:in `runNormally'
from Ruby.java:412:in `runFromMain'
from Main.java:304:in `run'
from Main.java:144:in `run'
from Main.java:113:in `main'
--
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