Title: [160792] trunk/Source/WebCore
Revision
160792
Author
[email protected]
Date
2013-12-18 13:03:14 -0800 (Wed, 18 Dec 2013)

Log Message

[iOS] Frequent ASSERT(hasOneRef()) in SharedBuffer::releasePurgeableBuffer
https://bugs.webkit.org/show_bug.cgi?id=125939

Reviewed by Simon Fraser.

r146082 fixed these assertions by not making a purgeable buffer if a SharedBuffer
has multiple refs, but the check was put in ResourceBuffer::createPurgeableBuffer
instead of down in SharedBuffer::createPurgeableBuffer.

This is fine for most WebKit ports, because ResourceBuffer::createPurgeableBuffer
is the only caller of SharedBuffer::createPurgeableBuffer, but causes trouble for
not-quite-yet-upstreamed iOS SharedBuffer code, which adds another caller
of SharedBuffer::createPurgeableBuffer.

Push the early-return down into SharedBuffer::createPurgeableBuffer to ensure
that all callers are protected from creating a purgeable buffer if the SharedBuffer
has previously been vended elsewhere.

No new tests, has no effect on the current Open Source tree.

* loader/ResourceBuffer.cpp:
(WebCore::ResourceBuffer::createPurgeableBuffer):
* platform/SharedBuffer.cpp:
(WebCore::SharedBuffer::createPurgeableBuffer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (160791 => 160792)


--- trunk/Source/WebCore/ChangeLog	2013-12-18 20:58:53 UTC (rev 160791)
+++ trunk/Source/WebCore/ChangeLog	2013-12-18 21:03:14 UTC (rev 160792)
@@ -1,3 +1,30 @@
+2013-12-18  Tim Horton  <[email protected]>
+
+        [iOS] Frequent ASSERT(hasOneRef()) in SharedBuffer::releasePurgeableBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=125939
+
+        Reviewed by Simon Fraser.
+
+        r146082 fixed these assertions by not making a purgeable buffer if a SharedBuffer
+        has multiple refs, but the check was put in ResourceBuffer::createPurgeableBuffer
+        instead of down in SharedBuffer::createPurgeableBuffer.
+
+        This is fine for most WebKit ports, because ResourceBuffer::createPurgeableBuffer
+        is the only caller of SharedBuffer::createPurgeableBuffer, but causes trouble for
+        not-quite-yet-upstreamed iOS SharedBuffer code, which adds another caller
+        of SharedBuffer::createPurgeableBuffer.
+
+        Push the early-return down into SharedBuffer::createPurgeableBuffer to ensure
+        that all callers are protected from creating a purgeable buffer if the SharedBuffer
+        has previously been vended elsewhere.
+
+        No new tests, has no effect on the current Open Source tree.
+
+        * loader/ResourceBuffer.cpp:
+        (WebCore::ResourceBuffer::createPurgeableBuffer):
+        * platform/SharedBuffer.cpp:
+        (WebCore::SharedBuffer::createPurgeableBuffer):
+
 2013-12-18  Beth Dakin  <[email protected]>
 
         Starting a momentum scroll while rubber banding can cause scrolling to jump back 

Modified: trunk/Source/WebCore/loader/ResourceBuffer.cpp (160791 => 160792)


--- trunk/Source/WebCore/loader/ResourceBuffer.cpp	2013-12-18 20:58:53 UTC (rev 160791)
+++ trunk/Source/WebCore/loader/ResourceBuffer.cpp	2013-12-18 21:03:14 UTC (rev 160792)
@@ -115,8 +115,6 @@
 void ResourceBuffer::createPurgeableBuffer() const
 {
     ASSERT(m_sharedBuffer);
-    if (!sharedBuffer()->hasOneRef())
-        return;
     sharedBuffer()->createPurgeableBuffer();
 }
 

Modified: trunk/Source/WebCore/platform/SharedBuffer.cpp (160791 => 160792)


--- trunk/Source/WebCore/platform/SharedBuffer.cpp	2013-12-18 20:58:53 UTC (rev 160791)
+++ trunk/Source/WebCore/platform/SharedBuffer.cpp	2013-12-18 21:03:14 UTC (rev 160792)
@@ -231,6 +231,9 @@
         return;
 #endif
 
+    if (!hasOneRef())
+        return;
+
     char* destination = 0;
     m_purgeableBuffer = PurgeableBuffer::createUninitialized(m_size, destination);
     if (!m_purgeableBuffer)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to