arton / rjb

Ruby Java Bridge
https://www.artonx.org/collabo/backyard/?RubyJavaBridge
GNU Lesser General Public License v2.1
117 stars 34 forks source link

Segfault on add_jar commons-math3-3.3.jar #80

Closed JasonBarnabe closed 3 years ago

JasonBarnabe commented 3 years ago

Ruby 2.6.6 Ubuntu 20.10 java -showversion gives:

java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
require `rjb`
Rjb::add_jar('commons-math3-3.3.jar')

rjb 1.6.2 - works rjb 1.6.3 - can't install rjb rjb 1.6.4 - segfault on add_jar

(pry):2: [BUG] Segmentation fault at 0x0000000000000000
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0046 p:---- s:0255 e:000254 CFUNC  :add_jar
c:0045 p:0032 s:0250 e:000249 EVAL   (pry):2 [FINISH]
c:0044 p:---- s:0247 e:000246 CFUNC  :eval
c:0043 p:0044 s:0240 e:000239 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387
c:0042 p:0251 s:0234 e:000233 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355
c:0041 p:0011 s:0223 e:000222 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274 [FINISH]
c:0040 p:---- s:0220 e:000219 CFUNC  :catch
c:0039 p:0008 s:0215 e:000214 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273 [FINISH]
c:0038 p:---- s:0212 e:000211 CFUNC  :catch
c:0037 p:0022 s:0207 e:000206 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272
c:0036 p:0062 s:0199 e:000198 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:77 [FINISH]
c:0035 p:---- s:0195 e:000194 CFUNC  :loop
c:0034 p:0005 s:0191 e:000190 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:67
c:0033 p:0005 s:0187 e:000186 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:38
c:0032 p:0015 s:0184 e:000183 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/input_lock.rb:59
c:0031 p:0029 s:0179 e:000178 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/input_lock.rb:77
c:0030 p:0023 s:0173 E:0000d0 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:38
c:0029 p:0019 s:0169 E:000108 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:13
c:0028 p:0196 s:0164 E:001598 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_class.rb:200
c:0027 p:0078 s:0157 E:0015d0 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-byebug-3.7.0/lib/pry-byebug/pry_ext.rb:13
c:0026 p:0182 s:0151 E:001600 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:70
c:0025 p:0011 s:0147 E:0018f8 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:19
c:0024 p:0058 s:0142 E:001920 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:102
c:0023 p:0064 s:0138 E:001680 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor/command.rb:27
c:0022 p:0047 s:0130 E:001968 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor/invocation.rb:127
c:0021 p:0259 s:0123 E:0019d8 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor.rb:392
c:0020 p:0043 s:0110 E:001a18 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/command/base.rb:69
c:0019 p:0130 s:0103 E:000258 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/command.rb:46
c:0018 p:0059 s:0092 E:001a50 TOP    /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands.rb:18 [FINISH]
c:0017 p:---- s:0087 e:000086 CFUNC  :require
c:0016 p:0057 s:0082 E:001a90 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:34
c:0015 p:0053 s:0076 E:001ac8 TOP    /www/Simplero/bin/rails:9 [FINISH]
c:0014 p:---- s:0072 e:000071 CFUNC  :load
c:0013 p:0050 s:0067 E:001af0 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/commands/rails.rb:6
c:0012 p:0018 s:0063 E:001b20 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/command_wrapper.rb:38
c:0011 p:0211 s:0059 E:001b50 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:215 [FINISH]
c:0010 p:---- s:0056 e:000055 CFUNC  :fork
c:0009 p:0242 s:0052 E:001610 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:175
c:0008 p:0065 s:0038 E:001bb0 BLOCK  /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:145 [FINISH]
c:0007 p:---- s:0035 e:000034 CFUNC  :loop
c:0006 p:0020 s:0031 E:001b80 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:139
c:0005 p:0155 s:0027 E:001798 TOP    /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application/boot.rb:19 [FINISH]
c:0004 p:---- s:0023 e:000022 CFUNC  :require
c:0003 p:0110 s:0018 E:000a80 METHOD /home/jason/.rbenv/versions/2.6.6/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54
c:0002 p:0006 s:0006 E:000b80 EVAL   -e:1 [FINISH]
c:0001 p:0000 s:0003 E:000b00 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
-e:1:in `<main>'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application/boot.rb:19:in `<top (required)>'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:139:in `run'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:139:in `loop'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:145:in `block in run'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:175:in `serve'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:175:in `fork'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/application.rb:215:in `block in serve'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/command_wrapper.rb:38:in `call'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/commands/rails.rb:6:in `call'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/commands/rails.rb:6:in `load'
/www/Simplero/bin/rails:9:in `<top (required)>'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:34:in `require'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:34:in `require'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands.rb:18:in `<top (required)>'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/command.rb:46:in `invoke'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/command/base.rb:69:in `perform'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:102:in `perform'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:19:in `start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/railties-6.0.3.5/lib/rails/commands/console/console_command.rb:70:in `start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-byebug-3.7.0/lib/pry-byebug/pry_ext.rb:13:in `start_with_pry_byebug'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_class.rb:200:in `start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:13:in `start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:38:in `start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/input_lock.rb:77:in `with_ownership'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/input_lock.rb:59:in `__with_ownership'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:38:in `block in start'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:67:in `repl'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:67:in `loop'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/repl.rb:77:in `block in repl'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'
/home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'
(pry):2:in `<main>'
(pry):2:in `add_jar'

-- Machine register context ------------------------------------------------
 RIP: 0x00007f2788843e62 RBP: 0x00007ffcbe6e1350 RSP: 0x00007ffcbe6e11e0
 RAX: 0x00007ffcbe6e1270 RBX: 0x0000556b0c111000 RCX: 0x00007f2789109440
 RDX: 0x00007f27891442f8 RDI: 0x00007ffcbe6e1230 RSI: 0x0000556b0c02d100
  R8: 0x0000556b0c111000  R9: 0x00007ffcbe6e0640 R10: 0x00007ffcbe775080
 R11: 0x00007ffcbe775090 R12: 0x00007ffcbe6e1230 R13: 0x0000556b0c1111f8
 R14: 0x0000000000000000 R15: 0x0000556b0c02d100 EFL: 0x0000000000010246
JasonBarnabe commented 3 years ago

commons-math3-3.3.zip

arton commented 3 years ago

Hi Jason

I'd like to see your Makefile and mkmf.log on /home/jason/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/rjb-1.6.4/ext. I wonder if you could attach these files on this issue.

JasonBarnabe commented 3 years ago

Makefile. There is no mkmf.log in that directory.

arton commented 3 years ago

Hi Jason

The problem was caused by configured rjb for the latest jdk. Rjb-1.6.4 detects version conflict with javac and javah, It uses the latest JDK for most cases. -- I know your case is rare, because installed the latest JDK, but uses elder JDK. Makefile shows that

jp_co_infoseek_hp_arton_rjb_RBridge.h : jniwrap.h ../data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
    javac -h . -classpath ../data/rjb RBridge.java      # <= rjb making process uses the latest JDK

I wonder if you could change your PATH for installing and running rjb gem. For example:

export PATH=(your 1.8.4 jdk bin path):$PATH
JasonBarnabe commented 3 years ago

Still get a segfault after adding /www/jdk1.8.0_271/bin to PATH, uninstalling rjb, reinstalling, and trying again.

arton commented 3 years ago

Could you attach the latest Makefile ? Was the Makefile's timestamp changed ?

-- I remember that you should input 'hash -r' on your shell for refresh PATH.

JasonBarnabe commented 3 years ago

New Makefile. The whole directory got wiped when I uninstalled rjb, so the timestamp changed.

JasonBarnabe commented 3 years ago

After running hash -r and reinstalling rjb, the segfault goes away.

arton commented 3 years ago

Great! IMHO it's better to remove JDK or JRE except 1.8.4 on your environment.