[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