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