From: Luc Heinrich Date: 2010-03-28T02:15:19+09:00 Subject: A sure way to crash JRuby with Nokogiri, on Windows Greetings, I'm sending this to Ruby-talk because I'm really not sure if the problem is in JRuby, Nokogiri or FFI. So, Using JRuby 1.4.0 (standard or complete) and Nokogiri-java 1.4.1, on Windows, try this: require "rubygems" require "nokogiri" xml = %Q(\n\n) p Nokogiri::XML::Document.parse(xml) It works. Now try this: require "rubygems" require "nokogiri" th = Thread.new do xml = %Q(\n\n) p Nokogiri::XML::Document.parse(xml) end th.join And see it crash with an EXCEPTION_ACCESS_VIOLATION. Here's the top of the stack: Stack: [0x03260000,0x032b0000], sp=0x032aedb4, free space=315k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [ntdll.dll+0x1b21a] C [ntdll.dll+0x1046] j com.kenai.jffi.Foreign.invokeVrI(J)I+0 j com.kenai.jffi.Invoker.invokeVrI(Lcom/kenai/jffi/Function;)I+8 j org.jruby.ext.ffi.jffi.FastIntMethodZeroArg.call(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyModule;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;+12 J org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; J org.jruby.runtime.callsite.CachingCallSite.call(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; J org.jruby.ast.CallNoArgNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject; J org.jruby.ast.NewlineNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject; J org.jruby.ast.BlockNode.interpret(Lorg/jruby/Ruby;Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject; This works just fine on OS X. Anyone has any idea what the problem is? -- Luc Heinrich - luc@honk-honk.com