Title: [257982] releases/WebKitGTK/webkit-2.28/Source/WebCore
Revision
257982
Author
[email protected]
Date
2020-03-06 06:28:03 -0800 (Fri, 06 Mar 2020)

Log Message

Merge r257639 - Retain cycle between CSSFontSelector -> CSSFontFaceSet -> CSSFontFace -> CSSFontSelector
https://bugs.webkit.org/show_bug.cgi?id=196437
<rdar://problem/46598332>

Reviewed by Alex Christensen.

Break the reference cycle using a WeakPtr. The leak was reproducible by browsing CNN.com
and then navigating to about:blank (those objects would stay around, even after memory
pressure signal).

* css/CSSFontFace.cpp:
(WebCore::CSSFontFace::CSSFontFace):
(WebCore::CSSFontFace::fontLoadEventOccurred):
* css/CSSFontFace.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog (257981 => 257982)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-03-06 14:27:59 UTC (rev 257981)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog	2020-03-06 14:28:03 UTC (rev 257982)
@@ -1,3 +1,20 @@
+2020-02-28  Chris Dumez  <[email protected]>
+
+        Retain cycle between CSSFontSelector -> CSSFontFaceSet -> CSSFontFace -> CSSFontSelector
+        https://bugs.webkit.org/show_bug.cgi?id=196437
+        <rdar://problem/46598332>
+
+        Reviewed by Alex Christensen.
+
+        Break the reference cycle using a WeakPtr. The leak was reproducible by browsing CNN.com
+        and then navigating to about:blank (those objects would stay around, even after memory
+        pressure signal).
+
+        * css/CSSFontFace.cpp:
+        (WebCore::CSSFontFace::CSSFontFace):
+        (WebCore::CSSFontFace::fontLoadEventOccurred):
+        * css/CSSFontFace.h:
+
 2020-02-28  Alberto Garcia  <[email protected]>
 
         [SOUP] Unreviewed. Fix unused parameter warning

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.cpp (257981 => 257982)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.cpp	2020-03-06 14:27:59 UTC (rev 257981)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.cpp	2020-03-06 14:28:03 UTC (rev 257982)
@@ -92,7 +92,7 @@
 }
 
 CSSFontFace::CSSFontFace(CSSFontSelector* fontSelector, StyleRuleFontFace* cssConnection, FontFace* wrapper, bool isLocalFallback)
-    : m_fontSelector(fontSelector)
+    : m_fontSelector(makeWeakPtr(fontSelector))
     , m_cssConnection(cssConnection)
     , m_wrapper(makeWeakPtr(wrapper))
     , m_isLocalFallback(isLocalFallback)
@@ -346,8 +346,8 @@
     if (m_sourcesPopulated)
         pump(ExternalResourceDownloadPolicy::Forbid);
 
-    ASSERT(m_fontSelector);
-    m_fontSelector->fontLoaded();
+    if (m_fontSelector)
+        m_fontSelector->fontLoaded();
 
     iterateClients(m_clients, [&](Client& client) {
         client.fontLoaded(*this);

Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.h (257981 => 257982)


--- releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.h	2020-03-06 14:27:59 UTC (rev 257981)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/css/CSSFontFace.h	2020-03-06 14:28:03 UTC (rev 257982)
@@ -184,7 +184,7 @@
     FontLoadingBehavior m_loadingBehavior { FontLoadingBehavior::Auto };
 
     Vector<std::unique_ptr<CSSFontFaceSource>, 0, CrashOnOverflow, 0> m_sources;
-    RefPtr<CSSFontSelector> m_fontSelector; // FIXME: https://bugs.webkit.org/show_bug.cgi?id=196437 There's a retain cycle: CSSFontSelector -> CSSFontFaceSet -> CSSFontFace -> CSSFontSelector
+    WeakPtr<CSSFontSelector> m_fontSelector; // FIXME: Ideally this data member would go away (https://bugs.webkit.org/show_bug.cgi?id=208351).
     RefPtr<StyleRuleFontFace> m_cssConnection;
     HashSet<Client*> m_clients;
     WeakPtr<FontFace> m_wrapper;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to