Merge pull request #400 from gnustep/nsurlhandle_cache

GSFileURLHandle: Remove file handle caching
This commit is contained in:
rfm 2024-05-12 10:11:28 +01:00 committed by GitHub
commit adbc7c2631
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 5 additions and 76 deletions

View file

@ -35,6 +35,7 @@
#import "Foundation/NSURLHandle.h"
#import "Foundation/NSRunLoop.h"
#import "Foundation/NSFileManager.h"
#import "Foundation/NSCache.h"
@class GSFTPURLHandle;
@ -604,33 +605,9 @@ static Class NSURLHandleClass = 0;
*/
@implementation GSFileURLHandle
static NSMutableDictionary *fileCache = nil;
static NSLock *fileLock = nil;
+ (NSURLHandle*) cachedHandleForURL: (NSURL*)url
{
NSURLHandle *obj = nil;
if ([url isFileURL] == YES)
{
NSString *path = [url path];
path = [path stringByStandardizingPath];
[fileLock lock];
NS_DURING
{
obj = [fileCache objectForKey: path];
IF_NO_ARC([[obj retain] autorelease];)
}
NS_HANDLER
{
[fileLock unlock];
[localException raise];
}
NS_ENDHANDLER
[fileLock unlock];
}
return obj;
return nil;
}
+ (BOOL) canInitWithURL: (NSURL*)url
@ -642,14 +619,6 @@ static NSLock *fileLock = nil;
return NO;
}
+ (void) initialize
{
fileCache = [NSMutableDictionary new];
[[NSObject leakAt: &fileCache] release];
fileLock = [NSLock new];
[[NSObject leakAt: &fileLock] release];
}
- (NSData*) availableResourceData
{
if (_data != nil)
@ -704,52 +673,9 @@ static NSLock *fileLock = nil;
path = [url path];
path = [path stringByStandardizingPath];
if (cached == YES)
{
id obj;
[fileLock lock];
NS_DURING
{
obj = [fileCache objectForKey: path];
if (obj != nil)
{
DESTROY(self);
IF_NO_ARC([obj retain];)
}
}
NS_HANDLER
{
obj = nil;
[fileLock unlock];
[localException raise];
}
NS_ENDHANDLER
[fileLock unlock];
if (obj != nil)
{
return obj;
}
}
if ((self = [super initWithURL: url cached: cached]) != nil)
{
_path = [path copy];
if (cached == YES)
{
[fileLock lock];
NS_DURING
{
[fileCache setObject: self forKey: _path];
}
NS_HANDLER
{
[fileLock unlock];
[localException raise];
}
NS_ENDHANDLER
[fileLock unlock];
}
}
return self;
}
@ -763,6 +689,7 @@ static NSLock *fileLock = nil;
traverseLink: YES];
RELEASE(_attributes);
_attributes = [dict mutableCopy];
[self didLoadBytes: d loadComplete: YES];
return d;
}

View file

@ -76,6 +76,8 @@ int main(int argc, char **argv)
[t terminate];
[t waitUntilExit];
}
END_SET("Keepalive")
[arp release]; arp = nil ;