Don't use dispatch_semaphore in NetworkCacheStorage
[WebKit-https.git] / Source / WebKit2 / NetworkProcess / cache / NetworkCacheIOChannelCocoa.mm
index 456119400cf1ecdc208611c10824a6e2254635cf..e8017e9de85a852f379d5ab8d4f7c176e07d2c88 100644 (file)
@@ -75,7 +75,7 @@ Ref<IOChannel> IOChannel::open(const String& filePath, IOChannel::Type type)
     return adoptRef(*new IOChannel(fd));
 }
 
-void IOChannel::read(size_t offset, size_t size, std::function<void ( Data&, int error)> completionHandler)
+void IOChannel::read(size_t offset, size_t size, std::function<void (Data&, int error)> completionHandler)
 {
     RefPtr<IOChannel> channel(this);
     bool didCallCompletionHandler = false;
@@ -95,6 +95,17 @@ void IOChannel::read(size_t offset, size_t size, std::function<void ( Data&, int
     });
 }
 
+// FIXME: It would be better to do without this.
+void IOChannel::readSync(size_t offset, size_t size, std::function<void (Data&, int error)> completionHandler)
+{
+    auto semaphore = adoptDispatch(dispatch_semaphore_create(0));
+    read(offset, size, [semaphore, &completionHandler](Data& data, int error) {
+        completionHandler(data, error);
+        dispatch_semaphore_signal(semaphore.get());
+    });
+    dispatch_semaphore_wait(semaphore.get(), DISPATCH_TIME_FOREVER);
+}
+
 void IOChannel::write(size_t offset, const Data& data, std::function<void (int error)> completionHandler)
 {
     RefPtr<IOChannel> channel(this);