From 64e45d14ba2d2ee2f96635939f1e3aed5911e792 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 6 Feb 2009 18:14:47 -0800 Subject: Use a persistent buffer with HttpRequest This allows us to avoid the overhead of allocating a new buffer each and every time we call sysread (even when just parsing headers for GET requests). --- lib/unicorn/http_request.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/unicorn/http_request.rb') diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb index aaa669a..61b84dd 100644 --- a/lib/unicorn/http_request.rb +++ b/lib/unicorn/http_request.rb @@ -6,12 +6,12 @@ module Unicorn # a StringIO object. To be safe, you should assume it works like a file. # class HttpRequest - attr_reader :logger + attr_reader :logger, :buffer - # You don't really call this. It's made for you. def initialize(logger) @logger = logger @tempfile = @body = nil + @buffer = ' ' * Const::CHUNK_SIZE # initial size, may grow end def reset @@ -72,7 +72,7 @@ module Unicorn # It also expects any initial part of the body that has been read to be in # the @body already. It will return true if successful and false if not. def read_body(socket, remain) - buf = ' ' # this string is reused for the lifetime of the loop + buf = @buffer while remain > 0 begin socket.sysread(remain, buf) # short read if it's a socket -- cgit v1.2.3-24-ge0c7