diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 1f39b823c8..227ed7d488 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,4 +1,6 @@ -*SVN* +*SVN* + +* Avoid memleak in dev mode when using fcgi * Simplified .clear on active record associations by using the existing delete_records method. #1906 [Caleb ] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 8af2c33ce5..be8b672fa7 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -940,9 +940,14 @@ module ActiveRecord #:nodoc: # end def define_attr_method(name, value=nil, &block) sing = class << self; self; end - block = proc { value.to_s } if value - sing.send( :alias_method, "original_#{name}", name ) - sing.send( :define_method, name, &block ) + sing.send :alias_method, "original_#{name}", name + if value + # use eval instead of a block to work around a memory leak in dev + # mode in fcgi + sing.class_eval "def #{name}; #{value.to_s.inspect}; end" + else + sing.send :define_method, name, &block + end end protected