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