Reviewed by Mitz.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 Oct 2006 16:50:10 +0000 (16:50 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 29 Oct 2006 16:50:10 +0000 (16:50 +0000)
        - fix crash visible on buildbot and also when running the test
          anchor-image-scrolled-x-y.html under libgmalloc

        * loader/mac/WebSubresourceLoader.h: Renamed m_loader to m_handle
        now that the class is named ResourceHandle.
        * loader/mac/WebSubresourceLoader.mm: Renaming, plus:
        (WebCore::SubresourceLoader::didFinishLoading): Get the handle into
        a local RefPtr before calling finishJobAndHandle, since we might get
        cancelled inside that function, so we should not rely on m_handle to
        keep the ResourceHandle alive.
        (WebCore::SubresourceLoader::didFail): Ditto.
        (WebCore::SubresourceLoader::didCancel): Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17414 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/loader/mac/WebSubresourceLoader.h
WebCore/loader/mac/WebSubresourceLoader.mm

index 44e612d1ddf09a724618e37a954b0187cba49e70..8d3b7e71ecfc62be9a91f73f826733ea29e1ee33 100644 (file)
@@ -1,6 +1,21 @@
-2006-10-29  Maciej Stachowiak  <mjs@apple.com>
+2006-10-29  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
 
-        Not reviewed.
+        - fix crash visible on buildbot and also when running the test
+          anchor-image-scrolled-x-y.html under libgmalloc
+
+        * loader/mac/WebSubresourceLoader.h: Renamed m_loader to m_handle
+        now that the class is named ResourceHandle.
+        * loader/mac/WebSubresourceLoader.mm: Renaming, plus:
+        (WebCore::SubresourceLoader::didFinishLoading): Get the handle into
+        a local RefPtr before calling finishJobAndHandle, since we might get
+        cancelled inside that function, so we should not rely on m_handle to
+        keep the ResourceHandle alive.
+        (WebCore::SubresourceLoader::didFail): Ditto.
+        (WebCore::SubresourceLoader::didCancel): Ditto.
+
+2006-10-29  Maciej Stachowiak  <mjs@apple.com>
 
         - build fix
 
@@ -2722,8 +2737,6 @@ t2006-10-29  Darin Adler  <darin@apple.com>
 
 2006-10-23  Maciej Stachowiak  <mjs@apple.com>
 
-        Not reviewed.
-
         - fixed build from last change.
 
         * bridge/mac/FrameMac.h:
@@ -6445,8 +6458,6 @@ t2006-10-29  Darin Adler  <darin@apple.com>
 
 2006-10-10  Maciej Stachowiak  <mjs@apple.com>
 
-        Not reviewed, build fix.
-
         - fixed release build
 
         * WebCore.xcodeproj/project.pbxproj:
@@ -27901,8 +27912,6 @@ t2006-10-29  Darin Adler  <darin@apple.com>
 
 2006-07-06  Maciej Stachowiak  <mjs@apple.com>
 
-        Not reviewed - build fix.
-
         - back out earlier leak fix, as it caused a crash on one of the fast/invalid layout tests
 
         * dom/Document.cpp:
index 0236a79a5bdf4c1f28810379c2143da916c5ccbf..88f0cf9cddd770a6232dd41d9a28eab1bf08ff22 100644 (file)
@@ -65,7 +65,7 @@ namespace WebCore {
 
         virtual void didCancel(NSError *);
 
-        RefPtr<ResourceHandle> m_loader;
+        RefPtr<ResourceHandle> m_handle;
         bool m_loadingMultipartContent;
     };
 
index 2e63009fb875633260aa9234e288c040d8f9f13f..679050ab3382e0c858c412c7e172c29149f581a8 100644 (file)
 #import <Foundation/NSURLResponse.h>
 #import <wtf/Assertions.h>
 
-using namespace WebCore;
-
 namespace WebCore {
 
-SubresourceLoader::SubresourceLoader(Frame* frame, ResourceHandle* loader)
+SubresourceLoader::SubresourceLoader(Frame* frame, ResourceHandle* handle)
     : WebResourceLoader(frame)
-    , m_loader(loader)
+    , m_handle(handle)
     , m_loadingMultipartContent(false)
 {
     frameLoader()->addSubresourceLoader(this);
@@ -57,7 +55,7 @@ SubresourceLoader::~SubresourceLoader()
 {
 }
 
-PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, ResourceHandle* loader, ResourceRequest& request)
+PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, ResourceHandle* handle, ResourceRequest& request)
 {
     FrameLoader* fl = frame->loader();
     if (fl->state() == FrameStateProvisional)
@@ -101,7 +99,7 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, ResourceHa
     
     fl->addExtraFieldsToRequest(newRequest, false, false);
 
-    RefPtr<SubresourceLoader> subloader(new SubresourceLoader(frame, loader));
+    RefPtr<SubresourceLoader> subloader(new SubresourceLoader(frame, handle));
     if (!subloader->load(newRequest))
         return 0;
 
@@ -113,7 +111,7 @@ NSURLRequest *SubresourceLoader::willSendRequest(NSURLRequest *newRequest, NSURL
     NSURL *oldURL = [request() URL];
     NSURLRequest *clientRequest = WebResourceLoader::willSendRequest(newRequest, redirectResponse);
     if (clientRequest && oldURL != [clientRequest URL] && ![oldURL isEqual:[clientRequest URL]])
-        m_loader->redirectedToURL([clientRequest URL]);
+        m_handle->redirectedToURL([clientRequest URL]);
     return clientRequest;
 }
 
@@ -128,7 +126,7 @@ void SubresourceLoader::didReceiveResponse(NSURLResponse *r)
     // anything including removing the last reference to this object; one example of this is 3266216.
     RefPtr<SubresourceLoader> protect(this);
 
-    m_loader->receivedResponse(r);
+    m_handle->receivedResponse(r);
     // The loader can cancel a load if it receives a multipart response for a non-image
     if (reachedTerminalState())
         return;
@@ -138,7 +136,7 @@ void SubresourceLoader::didReceiveResponse(NSURLResponse *r)
         // Since a subresource loader does not load multipart sections progressively,
         // deliver the previously received data to the loader all at once now.
         // Then clear the data to make way for the next multipart section.
-        m_loader->addData(resourceData());
+        m_handle->addData(resourceData());
         clearResourceData();
         
         // After the first multipart section is complete, signal to delegates that this load is "finished" 
@@ -155,7 +153,7 @@ void SubresourceLoader::didReceiveData(NSData *data, long long lengthReceived, b
     // A subresource loader does not load multipart sections progressively.
     // So don't deliver any data to the loader yet.
     if (!m_loadingMultipartContent)
-        m_loader->addData(data);
+        m_handle->addData(data);
     WebResourceLoader::didReceiveData(data, lengthReceived, allAtOnce);
 }
 
@@ -168,9 +166,8 @@ void SubresourceLoader::didFinishLoading()
     // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
     RefPtr<SubresourceLoader> protect(this);
 
-    if (m_loader)
-        m_loader->finishJobAndHandle(resourceData());
-    m_loader = 0;
+    if (RefPtr<ResourceHandle> handle = m_handle.release())
+        handle->finishJobAndHandle(resourceData());
 
     if (cancelled())
         return;
@@ -187,9 +184,8 @@ void SubresourceLoader::didFail(NSError *error)
     // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
     RefPtr<SubresourceLoader> protect(this);
 
-    if (m_loader)
-        m_loader->reportError();
-    m_loader = 0;
+    if (RefPtr<ResourceHandle> handle = m_handle.release())
+        handle->reportError();
 
     if (cancelled())
         return;
@@ -204,9 +200,8 @@ void SubresourceLoader::didCancel(NSError *error)
     // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
     RefPtr<SubresourceLoader> protect(this);
     
-    if (m_loader)
-        m_loader->reportError();
-    m_loader = 0;
+    if (RefPtr<ResourceHandle> handle = m_handle.release())
+        handle->reportError();
 
     if (cancelled())
         return;
@@ -215,4 +210,3 @@ void SubresourceLoader::didCancel(NSError *error)
 }
 
 }
-