From fde1cac9d31afc1823bf901230da031a26fe25ea Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 7 Oct 2011 15:15:05 +0000 Subject: [PATCH] small tweak for lowering resource usage during very heavy use of outgoing connections. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@33950 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/GSHTTPURLHandle.m | 31 +++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 82c0f6246..e874327c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-10-07 Richard Frith-Macdonald + + * Source/GSHTTPURLHandle.m: + Be aggressive about checking for close n the 'connection' header + and shutting down the network connection immediately. + 2011-10-07 Richard Frith-Macdonald * Source/NSURLProtocol.m: diff --git a/Source/GSHTTPURLHandle.m b/Source/GSHTTPURLHandle.m index 61844190e..396a1806a 100644 --- a/Source/GSHTTPURLHandle.m +++ b/Source/GSHTTPURLHandle.m @@ -651,13 +651,40 @@ static void debugWrite(GSHTTPURLHandle *handle, NSData *data) [nc removeObserver: self name: nil object: sock]; ver = [[[document headerNamed: @"http"] value] floatValue]; - val = [[document headerNamed: @"connection"] value]; - if (ver < 1.1 || (val != nil && [val isEqual: @"close"] == YES)) + if (ver < 1.1) { [nc removeObserver: self name: nil object: sock]; [sock closeFile]; DESTROY(sock); } + else if (nil != (val = [[document headerNamed: @"connection"] value])) + { + val = [val lowercaseString]; + if (YES == [val isEqualToString: @"close"]) + { + [nc removeObserver: self name: nil object: sock]; + [sock closeFile]; + DESTROY(sock); + } + else if ([val length] > 5) + { + NSEnumerator *e; + + e = [[val componentsSeparatedByString: @","] + objectEnumerator]; + while (nil != (val = [e nextObject])) + { + val = [val stringByTrimmingSpaces]; + if (YES == [val isEqualToString: @"close"]) + { + [nc removeObserver: self name: nil object: sock]; + [sock closeFile]; + DESTROY(sock); + break; + } + } + } + } /* * Retrieve essential keys from document