mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Merge pull request #400 from gnustep/nsurlhandle_cache
GSFileURLHandle: Remove file handle caching
This commit is contained in:
commit
adbc7c2631
2 changed files with 5 additions and 76 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -76,6 +76,8 @@ int main(int argc, char **argv)
|
|||
[t terminate];
|
||||
[t waitUntilExit];
|
||||
}
|
||||
|
||||
END_SET("Keepalive")
|
||||
|
||||
[arp release]; arp = nil ;
|
||||
|
||||
|
|
Loading…
Reference in a new issue