Title: [92271] trunk/Source/WebCore
Revision
92271
Author
ph...@webkit.org
Date
2011-08-03 04:14:52 -0700 (Wed, 03 Aug 2011)

Log Message

        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):

Modified Paths

Diff

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)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to