Bug #4350
closedSegmentation fault and Bus Error
Description
=begin
My server crashes 0-4 times a day with segmentation faults.
The fault seems related to activerecord transaction, but it is not always a same spot, so the attached are just examples of some occurrence.
The application is a tcp server base on eventmachine.
Ruby compiled from rvm, ruby-1.9.2-p0 and ruby-1.9.2-p136
System info: Linux foo 2.6.31-gentoo-r6 #1 SMP Wed Dec 23 08:10:43 CST 2009 x86_64 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz GenuineIntel GNU/Linux
Brief of logs
segfault1.ruby-1.9.2-p0.log
/usr/local/rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:314: [BUG] Segmentation fault
segfault2.ruby-1.9.2-p0.log
/usr/local/rvm/gems/ruby-1.9.2-p0/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:327: [BUG] Segmentation fault
segfault3.ruby-1.9.2-p0.log
/usr/local/rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:314: [BUG] Bus Error
segfault1.ruby-1.9.2-p136.log
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:310: [BUG] Segmentation fault
segfault2.ruby-1.9.2-p136.log
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:242: [BUG] Segmentation fault
segfault3.ruby-1.9.2-p136.log
/path_to_server/2011-01-30_231948/config/initializers/encoding.rb:12: [BUG] Segmentation fault
content of /path_to_server/2011-01-30_231948/config/initializers/encoding.rb
1 #workaround for "incompatible character encodings: UTF-8 and ASCII-8BIT"
2 #due to "测试" + [23423424234].pack("G")
3
4 unless SERVER_TYPE == 'proxy'
5 Encoding.default_external = Encoding::UTF_8 if RUBY_VERSION > "1.9"
6 if RUBY_VERSION > '1.9'
7 String.class_eval do
8 alias_method :quick_append, :<< unless method_defined? :quick_append
9 alias_method :quick_add, :+ unless method_defined? :quick_add
10 def <<(str)
11 str.force_encoding("UTF-8") unless str.frozen?
12 self.quick_append str
13 end
14 def +(str)
15 str.force_encoding("UTF-8") unless str.frozen?
16 self.quick_add str
17 end
18 end
19 StringIO.class_eval do
20 alias_method :quick_write, :write unless method_defined? :quick_write
21 def write(str)
22 str.force_encoding("UTF-8") unless (!str.is_a? String) || str.frozen?
23 self.quick_write str
24 end
25 end
26
27 else
28 String.class_eval do
29 def force_encoding(encode)
30 self
31 end
32 end
33 end
34 Fixnum.class_eval do
35 alias_method :quick_to_s, :to_s unless method_defined? :quick_to_s
36 def force_encoding(encode)
37 self
38 end
39 def to_s(base=10)
40 quick_to_s(base).force_encoding("UTF-8")
41 end
42 end
43 Array.class_eval do
44 alias_method :quick_pack, :pack unless method_defined? :quick_pack
45 def pack(*args)
46 quick_pack(*args).force_encoding("UTF-8")
47 end
48 end
49 end
=end
Files