Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp (236935 => 236936)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp 2018-10-08 20:18:26 UTC (rev 236935)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.cpp 2018-10-08 20:22:00 UTC (rev 236936)
@@ -124,8 +124,8 @@
struct Storage::TraverseOperation {
WTF_MAKE_FAST_ALLOCATED;
public:
- TraverseOperation(Storage& storage, const String& type, OptionSet<TraverseFlag> flags, TraverseHandler&& handler)
- : storage(storage)
+ TraverseOperation(Ref<Storage>&& storage, const String& type, OptionSet<TraverseFlag> flags, TraverseHandler&& handler)
+ : storage(WTFMove(storage))
, type(type)
, flags(flags)
, handler(WTFMove(handler))
@@ -233,6 +233,8 @@
, m_serialBackgroundIOQueue(WorkQueue::create("com.apple.WebKit.Cache.Storage.serialBackground", WorkQueue::Type::Serial, WorkQueue::QOS::Background))
, m_blobStorage(makeBlobDirectoryPath(baseDirectoryPath), m_salt)
{
+ ASSERT(RunLoop::isMain());
+
deleteOldVersions();
synchronize();
}
@@ -325,7 +327,13 @@
if (!shouldComputeExactRecordsSize)
recordsSize = estimateRecordsSize(recordCount, blobCount);
- RunLoop::main().dispatch([this, recordFilter = WTFMove(recordFilter), blobFilter = WTFMove(blobFilter), recordsSize]() mutable {
+ m_blobStorage.synchronize();
+
+ deleteEmptyRecordsDirectories(recordsPath());
+
+ LOG(NetworkCacheStorage, "(NetworkProcess) cache synchronization completed size=%zu recordCount=%u", recordsSize, recordCount);
+
+ RunLoop::main().dispatch([this, protectedThis = WTFMove(protectedThis), recordFilter = WTFMove(recordFilter), blobFilter = WTFMove(blobFilter), recordsSize]() mutable {
for (auto& recordFilterKey : m_recordFilterHashesAddedDuringSynchronization)
recordFilter->add(recordFilterKey);
m_recordFilterHashesAddedDuringSynchronization.clear();
@@ -340,13 +348,6 @@
m_synchronizationInProgress = false;
});
- m_blobStorage.synchronize();
-
- deleteEmptyRecordsDirectories(recordsPath());
-
- LOG(NetworkCacheStorage, "(NetworkProcess) cache synchronization completed size=%zu recordCount=%u", recordsSize, recordCount);
-
- RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis)] { });
});
}
@@ -598,11 +599,10 @@
serialBackgroundIOQueue().dispatch([this, protectedThis = WTFMove(protectedThis), key] () mutable {
deleteFiles(key);
- RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis)] { });
});
}
-void Storage::remove(const Vector<Key>& keys, Function<void ()>&& completionHandler)
+void Storage::remove(const Vector<Key>& keys, CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
@@ -620,10 +620,7 @@
for (auto& key : keysToRemove)
deleteFiles(key);
- RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis), completionHandler = WTFMove(completionHandler)] {
- if (completionHandler)
- completionHandler();
- });
+ RunLoop::main().dispatch(WTFMove(completionHandler));
});
}
@@ -909,7 +906,7 @@
ASSERT(traverseHandler);
// Avoid non-thread safe Function copies.
- auto traverseOperationPtr = std::make_unique<TraverseOperation>(*this, type, flags, WTFMove(traverseHandler));
+ auto traverseOperationPtr = std::make_unique<TraverseOperation>(makeRef(*this), type, flags, WTFMove(traverseHandler));
auto& traverseOperation = *traverseOperationPtr;
m_activeTraverseOperations.add(WTFMove(traverseOperationPtr));
@@ -997,7 +994,7 @@
shrinkIfNeeded();
}
-void Storage::clear(const String& type, WallTime modifiedSinceTime, Function<void ()>&& completionHandler)
+void Storage::clear(const String& type, WallTime modifiedSinceTime, CompletionHandler<void()>&& completionHandler)
{
ASSERT(RunLoop::isMain());
LOG(NetworkCacheStorage, "(NetworkProcess) clearing cache");
@@ -1025,10 +1022,7 @@
// This cleans unreferenced blobs.
m_blobStorage.synchronize();
- RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis), completionHandler = WTFMove(completionHandler)] {
- if (completionHandler)
- completionHandler();
- });
+ RunLoop::main().dispatch(WTFMove(completionHandler));
});
}
@@ -1147,8 +1141,6 @@
deleteDirectoryRecursively(oldVersionPath);
});
-
- RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis)] { });
});
}
Modified: trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h (236935 => 236936)
--- trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h 2018-10-08 20:18:26 UTC (rev 236935)
+++ trunk/Source/WebKit/NetworkProcess/cache/NetworkCacheStorage.h 2018-10-08 20:22:00 UTC (rev 236936)
@@ -45,7 +45,7 @@
class IOChannel;
-class Storage : public ThreadSafeRefCounted<Storage> {
+class Storage : public ThreadSafeRefCounted<Storage, WTF::DestructionThread::Main> {
public:
enum class Mode { Normal, AvoidRandomness };
static RefPtr<Storage> open(const String& cachePath, Mode);
@@ -85,8 +85,8 @@
void store(const Record&, MappedBodyHandler&&, CompletionHandler<void()>&& = { });
void remove(const Key&);
- void remove(const Vector<Key>&, Function<void ()>&&);
- void clear(const String& type, WallTime modifiedSinceTime, Function<void ()>&& completionHandler);
+ void remove(const Vector<Key>&, CompletionHandler<void()>&&);
+ void clear(const String& type, WallTime modifiedSinceTime, CompletionHandler<void()>&&);
struct RecordInfo {
size_t bodySize;