Modified: trunk/Source/WebCore/ChangeLog (92270 => 92271)
--- trunk/Source/WebCore/ChangeLog 2011-08-03 10:50:18 UTC (rev 92270)
+++ trunk/Source/WebCore/ChangeLog 2011-08-03 11:14:52 UTC (rev 92271)
@@ -1,3 +1,19 @@
+2011-08-03 Philippe Normand <pnorm...@igalia.com>
+
+ libsoup-CRITICAL **: soup_message_io_pause: assertion `io != NULL' failed
+ https://bugs.webkit.org/show_bug.cgi?id=64263
+
+ Reviewed by Martin Robinson.
+
+ Avoid any operation on not yet started messages and completed messages.
+
+ * platform/network/ResourceHandleInternal.h:
+ (WebCore::ResourceHandleInternal::ResourceHandleInternal):
+ * platform/network/soup/ResourceHandleSoup.cpp:
+ (WebCore::finishedCallback):
+ (WebCore::startHTTPRequest):
+ (WebCore::ResourceHandle::platformSetDefersLoading):
+
2011-08-03 Jeremy Moskovich <jer...@chromium.org>
[Chromium] Fix OOP font loading to work on 10.6.6 and above.
Modified: trunk/Source/WebCore/platform/network/ResourceHandleInternal.h (92270 => 92271)
--- trunk/Source/WebCore/platform/network/ResourceHandleInternal.h 2011-08-03 10:50:18 UTC (rev 92270)
+++ trunk/Source/WebCore/platform/network/ResourceHandleInternal.h 2011-08-03 11:14:52 UTC (rev 92271)
@@ -113,6 +113,8 @@
#endif
#if USE(SOUP)
, m_cancelled(false)
+ , m_finished(false)
+ , m_finishedHandler(0)
, m_buffer(0)
, m_bodySize(0)
, m_bodyDataSent(0)
@@ -191,6 +193,8 @@
GRefPtr<SoupMessage> m_soupMessage;
ResourceResponse m_response;
bool m_cancelled;
+ bool m_finished;
+ gulong m_finishedHandler;
GRefPtr<SoupRequest> m_soupRequest;
GRefPtr<GInputStream> m_inputStream;
GRefPtr<GCancellable> m_cancellable;
Modified: trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp (92270 => 92271)
--- trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp 2011-08-03 10:50:18 UTC (rev 92270)
+++ trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp 2011-08-03 11:14:52 UTC (rev 92271)
@@ -360,6 +360,14 @@
client->didReceiveData(handle.get(), chunk->data, chunk->length, -1);
}
+static void finishedCallback(SoupMessage* msg, gpointer data)
+{
+ RefPtr<ResourceHandle> handle = static_cast<ResourceHandle*>(data);
+ if (!handle)
+ return;
+ handle->getInternal()->m_finished = true;
+}
+
static void cleanupSoupRequestOperation(ResourceHandle* handle, bool isDestroying = false)
{
ResourceHandleInternal* d = handle->getInternal();
@@ -564,6 +572,8 @@
url.removeFragmentIdentifier();
request.setURL(url);
+ d->m_finished = false;
+
GOwnPtr<GError> error;
d->m_soupRequest = adoptGRef(soup_requester_request(requester, url.string().utf8().data(), &error.outPtr()));
if (error) {
@@ -589,6 +599,7 @@
g_signal_connect(soupMessage, "got-headers", G_CALLBACK(gotHeadersCallback), handle);
g_signal_connect(soupMessage, "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), handle);
d->m_gotChunkHandler = g_signal_connect(soupMessage, "got-chunk", G_CALLBACK(gotChunkCallback), handle);
+ d->m_finishedHandler = g_signal_connect(soupMessage, "finished", G_CALLBACK(finishedCallback), handle);
String firstPartyString = request.firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
@@ -703,8 +714,9 @@
if (!d->m_soupMessage)
return;
+ // Avoid any operation on not yet started messages and completed messages.
SoupMessage* soupMessage = d->m_soupMessage.get();
- if (soupMessage->status_code != SOUP_STATUS_NONE)
+ if (d->m_finished || soupMessage->status_code == SOUP_STATUS_NONE)
return;
if (defersLoading)