Project

General

Profile

Bug #8374

Updated by nobu (Nobuyoshi Nakada) over 11 years ago

=begin 
 Requiring a gem with a C extension seems to be not threadsafe. 

 
  
 Any one of the require lines below will frequently (but not always) cause an error like the following: 

   
  
       /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- sqlite3 (LoadError) 
         
	       from /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
         
	       from thread.rb:7:in `block (2 levels) in <main>' 

 
  
 Using one thread avoids the problem. 

   

 __BEGIN__ 

 ths = (1..2).map do 
     
   Thread.new do 
   
 #      require 'msgpack' 
   
 #      require 'yajl' 
   
 #      require 'sequel' 
   
 #      require 'nio4r' 
       
     require 'sqlite3' 
     end 
   end 

   
 end 

 ths.each {|th| th.join} 
 =end 

Back