Title: [159173] trunk/Source/WebKit2
Revision
159173
Author
[email protected]
Date
2013-11-12 18:24:35 -0800 (Tue, 12 Nov 2013)

Log Message

fast/canvas/webgl/draw-arrays-out-of-bounds.html is flaky on Mavericks WK2 testers, fails about 20% of the time
https://bugs.webkit.org/show_bug.cgi?id=124223
<rdar://problem/15333977>

Reviewed by Tim Horton.

It's wrong to use DataReferences in sync IPC replies; the underlying MessageDecoder will be freed after the call to
sendSync returns and the DataReference will point to freed memory. Use a Vector<char> instead.

* NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* NetworkProcess/SynchronousNetworkLoaderClient.cpp:
(WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
(WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
* NetworkProcess/SynchronousNetworkLoaderClient.h:
* WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
(WebKit::WebPlatformStrategies::loadResourceSynchronously):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (159172 => 159173)


--- trunk/Source/WebKit2/ChangeLog	2013-11-13 02:19:33 UTC (rev 159172)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-13 02:24:35 UTC (rev 159173)
@@ -1,3 +1,22 @@
+2013-11-12  Anders Carlsson  <[email protected]>
+
+        fast/canvas/webgl/draw-arrays-out-of-bounds.html is flaky on Mavericks WK2 testers, fails about 20% of the time
+        https://bugs.webkit.org/show_bug.cgi?id=124223
+        <rdar://problem/15333977>
+
+        Reviewed by Tim Horton.
+
+        It's wrong to use DataReferences in sync IPC replies; the underlying MessageDecoder will be freed after the call to
+        sendSync returns and the DataReference will point to freed memory. Use a Vector<char> instead.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+        * NetworkProcess/SynchronousNetworkLoaderClient.cpp:
+        (WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
+        (WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
+        * NetworkProcess/SynchronousNetworkLoaderClient.h:
+        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
+
 2013-11-12  Gustavo Noronha Silva  <[email protected]>
 
         Unreviewed try at fixing the GTK+ build.

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in (159172 => 159173)


--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2013-11-13 02:19:33 UTC (rev 159172)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2013-11-13 02:24:35 UTC (rev 159173)
@@ -25,7 +25,7 @@
 messages -> NetworkConnectionToWebProcess LegacyReceiver {
 
     ScheduleResourceLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters)
-    PerformSynchronousLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters) -> (WebCore::ResourceError error, WebCore::ResourceResponse response, CoreIPC::DataReference data) Delayed
+    PerformSynchronousLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters) -> (WebCore::ResourceError error, WebCore::ResourceResponse response, Vector<char> data) Delayed
     RemoveLoadIdentifier(uint64_t resourceLoadIdentifier)
     
     ServePendingRequests(uint32_t resourceLoadPriority)

Modified: trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp (159172 => 159173)


--- trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp	2013-11-13 02:19:33 UTC (rev 159172)
+++ trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp	2013-11-13 02:24:35 UTC (rev 159173)
@@ -88,7 +88,7 @@
     // It's unclear if the potential complexities of that approach are worth it.
     
     if (!m_responseData)
-        m_responseData = adoptPtr(new Vector<uint8_t>);
+        m_responseData = adoptPtr(new Vector<char>);
 
     m_responseData->append(buffer->data(), buffer->size());
 }
@@ -108,15 +108,12 @@
 {
     ASSERT(m_delayedReply);
 
-    uint8_t* bytes = m_responseData ? m_responseData->data() : 0;
-    size_t size = m_responseData ? m_responseData->size() : 0;
-
     if (m_response.isNull()) {
         ASSERT(!m_error.isNull());
         //platformSynthesizeErrorResponse();
     }
 
-    m_delayedReply->send(m_error, m_response, CoreIPC::DataReference(bytes, size));
+    m_delayedReply->send(m_error, m_response, m_responseData ? *m_responseData : Vector<char>());
     m_delayedReply = nullptr;
 }
 

Modified: trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h (159172 => 159173)


--- trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h	2013-11-13 02:19:33 UTC (rev 159172)
+++ trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h	2013-11-13 02:24:35 UTC (rev 159173)
@@ -66,8 +66,7 @@
     RefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> m_delayedReply;
     WebCore::ResourceResponse m_response;
     WebCore::ResourceError m_error;
-    OwnPtr<Vector<uint8_t>> m_responseData;
-
+    OwnPtr<Vector<char>> m_responseData;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (159172 => 159173)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp	2013-11-13 02:19:33 UTC (rev 159172)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp	2013-11-13 02:24:35 UTC (rev 159173)
@@ -258,8 +258,6 @@
     WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
     WebPage* webPage = webFrame ? webFrame->page() : 0;
 
-    CoreIPC::DataReference dataReference;
-
     NetworkResourceLoadParameters loadParameters;
     loadParameters.identifier = resourceLoadIdentifier;
     loadParameters.webPageID = webPage ? webPage->pageID() : 0;
@@ -272,16 +270,14 @@
     loadParameters.inPrivateBrowsingMode = context->storageSession().isPrivateBrowsingSession();
     loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect = context->shouldClearReferrerOnHTTPSToHTTPRedirect();
 
-    if (!WebProcess::shared().networkConnection()->connection()->sendSync(Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad(loadParameters), Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::Reply(error, response, dataReference), 0)) {
+    data.resize(0);
+
+    if (!WebProcess::shared().networkConnection()->connection()->sendSync(Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad(loadParameters), Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::Reply(error, response, data), 0)) {
         response = ResourceResponse();
         error = internalError(request.url());
-        data.resize(0);
 
         return;
     }
-
-    data.resize(dataReference.size());
-    memcpy(data.data(), dataReference.data(), dataReference.size());
 }
 
 #if ENABLE(BLOB)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to