public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Squash memory leak when calling flush with an empty buffer

[#1552 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
fcheung (author)
Wed Dec 10 14:36:58 -0800 2008
jeremy (committer)
Wed Dec 10 15:07:34 -0800 2008
commit  9f69ff12d44c4d1e475fd6efede120ccedba3b3e
tree    54736917ef42c4c84f04b03c703a3db7aca43da6
parent  d45e2c733d471b0c87f7cf721376ca4802450121
...
96
97
98
99
100
101
 
 
 
 
102
103
104
...
96
97
98
 
99
100
101
102
103
104
105
106
107
0
@@ -96,9 +96,12 @@ module ActiveSupport
0
       @guard.synchronize do
0
         unless buffer.empty?
0
           old_buffer = buffer
0
-          clear_buffer
0
           @log.write(old_buffer.join)
0
         end
0
+
0
+        # Important to do this even if buffer was empty or else @buffer will
0
+        # accumulate empty arrays for each request where nothing was logged.
0
+        clear_buffer
0
       end
0
     end
0
 
...
137
138
139
 
 
 
 
 
 
140
...
137
138
139
140
141
142
143
144
145
146
0
@@ -137,4 +137,10 @@ class BufferedLoggerTest < Test::Unit::TestCase
0
     assert @output.string.include?("a\nb\nc\n")
0
     assert @output.string.include?("x\ny\nz\n")
0
   end
0
+
0
+  def test_flush_should_remove_empty_buffers
0
+    @logger.send :buffer
0
+    @logger.expects :clear_buffer
0
+    @logger.flush
0
+  end
0
 end

Comments