summaryrefslogtreecommitdiffstats
path: root/WebKit/mac/Misc/WebNSFileManagerExtras.m
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/mac/Misc/WebNSFileManagerExtras.m')
-rw-r--r--WebKit/mac/Misc/WebNSFileManagerExtras.m40
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