DOMCache should dereference itself as soon as stopped
authoryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2018 17:14:12 +0000 (17:14 +0000)
committeryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2018 17:14:12 +0000 (17:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190441

Reviewed by Chris Dumez.

Dereference the DOMCache as soon as its context is stopped instead of waiting for garbage collection.
This allows freeing resources sooner in the network process.
No observable change of behavior since the DOMCache becomes no-op when its context is stopped.

* Modules/cache/DOMCache.cpp:
(WebCore::DOMCache::~DOMCache):
(WebCore::DOMCache::stop):

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

Source/WebCore/ChangeLog
Source/WebCore/Modules/cache/DOMCache.cpp

index e110d2d..a2b6286 100644 (file)
@@ -1,3 +1,18 @@
+2018-10-12  Youenn Fablet  <youenn@apple.com>
+
+        DOMCache should dereference itself as soon as stopped
+        https://bugs.webkit.org/show_bug.cgi?id=190441
+
+        Reviewed by Chris Dumez.
+
+        Dereference the DOMCache as soon as its context is stopped instead of waiting for garbage collection.
+        This allows freeing resources sooner in the network process.
+        No observable change of behavior since the DOMCache becomes no-op when its context is stopped.
+
+        * Modules/cache/DOMCache.cpp:
+        (WebCore::DOMCache::~DOMCache):
+        (WebCore::DOMCache::stop):
+
 2018-10-12  Jer Noble  <jer.noble@apple.com>
 
         CRASH in WebCore::MediaPlayerPrivateAVFoundation::setPreload
index f792f5a..d2aa7a2 100644 (file)
@@ -51,7 +51,8 @@ DOMCache::DOMCache(ScriptExecutionContext& context, String&& name, uint64_t iden
 
 DOMCache::~DOMCache()
 {
-    m_connection->dereference(m_identifier);
+    if (!m_isStopped)
+        m_connection->dereference(m_identifier);
 }
 
 void DOMCache::match(RequestInfo&& info, CacheQueryOptions&& options, Ref<DeferredPromise>&& promise)
@@ -570,7 +571,10 @@ void DOMCache::updateRecords(Vector<Record>&& records)
 
 void DOMCache::stop()
 {
+    if (m_isStopped)
+        return;
     m_isStopped = true;
+    m_connection->dereference(m_identifier);
 }
 
 const char* DOMCache::activeDOMObjectName() const