[macruby-changes] [4292] ControlTower/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jun 25 23:26:33 PDT 2010
Revision: 4292
http://trac.macosforge.org/projects/ruby/changeset/4292
Author: lsansonetti at apple.com
Date: 2010-06-25 23:26:32 -0700 (Fri, 25 Jun 2010)
Log Message:
-----------
reuse CTParser object, reuse NSData object during HTTP header parsing, removed extra debugging log
Modified Paths:
--------------
ControlTower/trunk/ext/CTParser/CTParser.m
ControlTower/trunk/lib/control_tower/rack_socket.rb
Modified: ControlTower/trunk/ext/CTParser/CTParser.m
===================================================================
--- ControlTower/trunk/ext/CTParser/CTParser.m 2010-06-26 06:25:14 UTC (rev 4291)
+++ ControlTower/trunk/ext/CTParser/CTParser.m 2010-06-26 06:26:32 UTC (rev 4292)
@@ -166,12 +166,8 @@
forEnvironment:(NSMutableDictionary *)env
startingAt:(NSNumber *)startingPos
{
- NSMutableData *dataForParser = [NSMutableData dataWithLength:
- [dataBuf length] + 1];
- [dataForParser setData:dataBuf];
- [dataForParser appendData:'\0'];
- const char *data = [dataForParser bytes];
- size_t length = [dataForParser length];
+ const char *data = [dataBuf bytes];
+ size_t length = [dataBuf length] - 1; // ignore \0 sentinel
size_t offset = [startingPos unsignedLongValue];
_parser->data = env;
Modified: ControlTower/trunk/lib/control_tower/rack_socket.rb
===================================================================
--- ControlTower/trunk/lib/control_tower/rack_socket.rb 2010-06-26 06:25:14 UTC (rev 4291)
+++ ControlTower/trunk/lib/control_tower/rack_socket.rb 2010-06-26 06:26:32 UTC (rev 4292)
@@ -81,8 +81,10 @@
end
def parse!(connection, env)
- parser = ::CTParser.new
+ parser = Thread.current[:http_parser] ||= ::CTParser.new
+ parser.reset
data = NSMutableData.alloc.init
+ data.increaseLengthBy(1)
parsing_headers = true # Parse headers first
nread = 0
content_length = 0
@@ -96,7 +98,9 @@
# Until the headers are done being parsed, we'll parse them
if parsing_headers
+ data.setLength(data.length - 1) # Remove sentinel
data.appendData(incoming_bytes)
+ data.increaseLengthBy(1) # Add sentinel
nread = parser.parseData(data, forEnvironment: env, startingAt: nread)
if parser.finished == 1
parsing_headers = false # We're done, now on to receiving the body
@@ -115,7 +119,6 @@
env['rack.input'].each { |upload_data| body_handle.writeData(upload_data) }
body.rewind
env['rack.input'] = body
- $stdout.puts "Finished creating the rack.input file at #{Time.now.to_f}"
else
body = StringIO.new
env['rack.input'].each { |upload_data| body << upload_data.to_str }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100625/6658fddb/attachment-0001.html>
More information about the macruby-changes
mailing list