diff options
Diffstat (limited to 'WebKit/mac/Misc/WebNSFileManagerExtras.m')
-rw-r--r-- | WebKit/mac/Misc/WebNSFileManagerExtras.m | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/WebKit/mac/Misc/WebNSFileManagerExtras.m b/WebKit/mac/Misc/WebNSFileManagerExtras.m index 0c10725..f32b4c0 100644 --- a/WebKit/mac/Misc/WebNSFileManagerExtras.m +++ b/WebKit/mac/Misc/WebNSFileManagerExtras.m @@ -28,10 +28,12 @@ #import <WebKit/WebNSFileManagerExtras.h> +#import <WebCore/FoundationExtras.h> #import <WebKit/WebKitNSStringExtras.h> #import <WebKitSystemInterface.h> #import <wtf/Assertions.h> +#import <pthread.h> #import <sys/mount.h> @implementation NSFileManager (WebNSFileManagerExtras) @@ -144,11 +146,47 @@ return [carbonPathPieces componentsJoinedByString:@":"]; } +typedef struct MetaDataInfo +{ + NSString *URLString; + NSString *referrer; + NSString *path; +} MetaDataInfo; + +static void *setMetaData(void* context) +{ + MetaDataInfo *info = (MetaDataInfo *)context; + WKSetMetadataURL(info->URLString, info->referrer, info->path); + + HardRelease(info->URLString); + HardRelease(info->referrer); + HardRelease(info->path); + + free(info); + return 0; +} + - (void)_webkit_setMetadataURL:(NSString *)URLString referrer:(NSString *)referrer atPath:(NSString *)path { ASSERT(URLString); ASSERT(path); - WKSetMetadataURL(URLString, referrer, path); + + // Spawn a background thread for WKSetMetadataURL because this function will not return until mds has + // journaled the data we're're trying to set. Depending on what other I/O is going on, it can take some + // time. + pthread_t tid; + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + + MetaDataInfo *info = malloc(sizeof(MetaDataInfo)); + + info->URLString = HardRetainWithNSRelease([URLString copy]); + info->referrer = HardRetainWithNSRelease([referrer copy]); + info->path = HardRetainWithNSRelease([path copy]); + + pthread_create(&tid, &attr, setMetaData, info); + pthread_attr_destroy(&attr); } - (NSString *)_webkit_startupVolumeName |