[前][次][番号順一覧][スレッド一覧]

ruby-changes:49568

From: normal <ko1@a...>
Date: Mon, 8 Jan 2018 19:23:33 +0900 (JST)
Subject: [ruby-changes:49568] normal:r61684 (trunk): net/http: clear compressed chunk after decompression

normal	2018-01-08 19:23:27 +0900 (Mon, 08 Jan 2018)

  New Revision: 61684

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=61684

  Log:
    net/http: clear compressed chunk after decompression
    
    We no longer need the compressed data once the inflate block is
    called; so clear it ASAP to reduce memory overhead.  This is a
    small chunk, so it only saves a few hundred kilobytes with the
    script below.
    
    before:        RssAnon:     5976 kB
     after:        RssAnon:     5564 kB
    ------
    require 'net/http'
    require 'zlib'
    response_gz = ARGV.shift or abort "#$0 TEMPORARY_FILE"
    
     # pre-create response since compressing is slower than decompressing
    unless File.readable?(response_gz)
      nr = 16384 * 2
      buf = ((0..255).map(&:chr).join * 128)
      File.open(response_gz, 'wb') do |fp|
        gzip = Zlib::GzipWriter.new(fp)
        nr.times { gzip.write(buf) }
        gzip.close
      end
      buf.clear
    end
    response_gz = File.open(response_gz)
    
    s = TCPServer.new('127.0.0.1', 0)
    pid = fork do
      c = s.accept
      c.readpartial(16384).clear
      c.write("HTTP/1.1 200 OK\r\n" \
              "Content-Length: #{response_gz.stat.size}\r\n" \
              "Content-Encoding: gzip\r\n" \
              "Accept-Ranges: bytes\r\n" \
              "\r\n")
      IO.copy_stream(response_gz, c)
      c.close
    end
    
    addr = s.addr
    Net::HTTP.start(addr[3], addr[1]) do |http|
      http.request_get(-'/') do |res|
        res.read_body(&:clear)
      end
    end
    puts File.readlines(-'/proc/self/status').grep(/RssAnon/)[0]
    Process.waitpid2(pid)
    ------
    * lib/net/http/response.rb (inflate_adapter): clear compressed_chunk

  Modified files:
    trunk/lib/net/http/response.rb
Index: lib/net/http/response.rb
===================================================================
--- lib/net/http/response.rb	(revision 61683)
+++ lib/net/http/response.rb	(revision 61684)
@@ -380,6 +380,7 @@ class Net::HTTPResponse https://github.com/ruby/ruby/blob/trunk/lib/net/http/response.rb#L380
       end
       block = proc do |compressed_chunk|
         @inflate.inflate(compressed_chunk) do |chunk|
+          compressed_chunk.clear
           dest << chunk
         end
       end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]