Title: [226368] trunk/Source/WebCore
Revision
226368
Author
mcatanz...@igalia.com
Date
2018-01-03 10:53:17 -0800 (Wed, 03 Jan 2018)

Log Message

ASSERTION FAILED: !source || is<Target>(*source) in CoordinatedGraphicsLayer::removeFromParent
https://bugs.webkit.org/show_bug.cgi?id=166568

Reviewed by Simon Fraser.

When a GraphicsLayer has a mask layer, it fails to properly unparent the mask layer before
it is destroyed. This leaves the mask layer with a dangling parent pointer. Fix it, while
taking care not to introduce yet another virtual function call during the execution of the
destructor.

* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::willBeDestroyed):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (226367 => 226368)


--- trunk/Source/WebCore/ChangeLog	2018-01-03 18:46:26 UTC (rev 226367)
+++ trunk/Source/WebCore/ChangeLog	2018-01-03 18:53:17 UTC (rev 226368)
@@ -1,3 +1,18 @@
+2018-01-03  Michael Catanzaro  <mcatanz...@igalia.com>
+
+        ASSERTION FAILED: !source || is<Target>(*source) in CoordinatedGraphicsLayer::removeFromParent
+        https://bugs.webkit.org/show_bug.cgi?id=166568
+
+        Reviewed by Simon Fraser.
+
+        When a GraphicsLayer has a mask layer, it fails to properly unparent the mask layer before
+        it is destroyed. This leaves the mask layer with a dangling parent pointer. Fix it, while
+        taking care not to introduce yet another virtual function call during the execution of the
+        destructor.
+
+        * platform/graphics/GraphicsLayer.cpp:
+        (WebCore::GraphicsLayer::willBeDestroyed):
+
 2018-01-03  Simon Fraser  <simon.fra...@apple.com>
 
         SVG lighting filter lights are in the wrong coordinate system

Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp (226367 => 226368)


--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp	2018-01-03 18:46:26 UTC (rev 226367)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp	2018-01-03 18:53:17 UTC (rev 226368)
@@ -166,6 +166,11 @@
     if (m_replicatedLayer)
         m_replicatedLayer->setReplicatedByLayer(0);
 
+    if (m_maskLayer) {
+        m_maskLayer->setParent(nullptr);
+        m_maskLayer->setIsMaskLayer(false);
+    }
+
     removeAllChildren();
     removeFromParent();
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to