Changeset 240049 in webkit


Ignore:
Timestamp:
Jan 16, 2019 12:51:19 PM (5 years ago)
Author:
youenn@apple.com
Message:

ServiceWorkerContainer is leaking due to a ref cycle
https://bugs.webkit.org/show_bug.cgi?id=193462
<rdar://problem/47026303>

Reviewed by Brady Eidson.

ServiceWorkerContainer keeps a reference to its ready promise.
The ready promise keeps a ref to its value which is a ServiceWorkerRegistration.
ServiceWorkerRegistration keeps a ref to ServiceWorkerContainer.

To break the reference cycle, set the ready promise to zero when ServiceWorkerContainer is stopped.

Covered by imported/w3c/web-platform-tests/service-workers/service-worker/ready.https.html no longer leaking.

  • workers/service/ServiceWorkerContainer.cpp:

(WebCore::ServiceWorkerContainer::stop):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r240047 r240049  
     12019-01-16  Youenn Fablet  <youenn@apple.com>
     2
     3        ServiceWorkerContainer is leaking due to a ref cycle
     4        https://bugs.webkit.org/show_bug.cgi?id=193462
     5        <rdar://problem/47026303>
     6
     7        Reviewed by Brady Eidson.
     8
     9        ServiceWorkerContainer keeps a reference to its ready promise.
     10        The ready promise keeps a ref to its value which is a ServiceWorkerRegistration.
     11        ServiceWorkerRegistration keeps a ref to ServiceWorkerContainer.
     12
     13        To break the reference cycle, set the ready promise to zero when ServiceWorkerContainer is stopped.
     14
     15        Covered by imported/w3c/web-platform-tests/service-workers/service-worker/ready.https.html no longer leaking.
     16
     17        * workers/service/ServiceWorkerContainer.cpp:
     18        (WebCore::ServiceWorkerContainer::stop):
     19
    1202019-01-15  Simon Fraser  <simon.fraser@apple.com>
    221
  • trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp

    r239659 r240049  
    633633    removeAllEventListeners();
    634634    m_pendingPromises.clear();
     635    m_readyPromise = nullptr;
    635636    for (auto& job : m_jobMap.values())
    636637        job->cancelPendingLoad();
Note: See TracChangeset for help on using the changeset viewer.