From e2fc88eef49af4ca8e35ae78ce3221c947e168c7 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Fri, 14 Oct 2005 15:04:57 +0000 Subject: Avoid memleak in dev mode with fastcgi git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2584 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 4 +++- activerecord/lib/active_record/base.rb | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) 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 -- cgit v1.2.3