CacheStorage::Caches should clear m_caches when clearing its representation even...
authoryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Mar 2018 19:54:01 +0000 (19:54 +0000)
committeryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Mar 2018 19:54:01 +0000 (19:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=183945

Reviewed by Chris Dumez.

* NetworkProcess/cache/CacheStorageEngineCaches.cpp:
(WebKit::CacheStorage::Caches::clearMemoryRepresentation):
In case we clear Caches in the middle of the initialization, m_caches might not be empty
but m_isInitialized is not yet set to true since we are computing the Caches size.
Update the assertion and clear m_caches in that case.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229914 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp

index c3cb7daa62478d024f9ef372460473fafab608eb..22795e328647d13986dbf69ba657d58646fb6822 100644 (file)
@@ -1,3 +1,16 @@
+2018-03-23  Youenn Fablet  <youenn@apple.com>
+
+        CacheStorage::Caches should clear m_caches when clearing its representation even though it is not yet initialized
+        https://bugs.webkit.org/show_bug.cgi?id=183945
+
+        Reviewed by Chris Dumez.
+
+        * NetworkProcess/cache/CacheStorageEngineCaches.cpp:
+        (WebKit::CacheStorage::Caches::clearMemoryRepresentation):
+        In case we clear Caches in the middle of the initialization, m_caches might not be empty
+        but m_isInitialized is not yet set to true since we are computing the Caches size.
+        Update the assertion and clear m_caches in that case.
+
 2018-03-23  David Kilzer  <ddkilzer@apple.com>
 
         Stop using dispatch_set_target_queue()
 2018-03-23  David Kilzer  <ddkilzer@apple.com>
 
         Stop using dispatch_set_target_queue()
index 5fcc3ec9fa135f82101beb534e60d9414b269a82..cd1c24acbacc69320115c52fa1d94cc7921eab27 100644 (file)
@@ -548,8 +548,9 @@ void Caches::removeCacheEntry(const NetworkCache::Key& key)
 void Caches::clearMemoryRepresentation()
 {
     if (!m_isInitialized) {
 void Caches::clearMemoryRepresentation()
 {
     if (!m_isInitialized) {
-        ASSERT(m_caches.isEmpty());
+        ASSERT(m_caches.isEmpty() || !m_pendingInitializationCallbacks.isEmpty());
         // m_storage might not be null in case Caches is being initialized. This is fine as nullify it below is a memory optimization.
         // m_storage might not be null in case Caches is being initialized. This is fine as nullify it below is a memory optimization.
+        m_caches.clear();
         return;
     }
 
         return;
     }