Index: Source/core/loader/cache/CachedResource.cpp |
diff --git a/Source/core/loader/cache/CachedResource.cpp b/Source/core/loader/cache/CachedResource.cpp |
index e41d4dbf232112e3219cef1f041ca96e2fdef439..bb03b79ed34285af29833543268d655c0a84fa54 100644 |
--- a/Source/core/loader/cache/CachedResource.cpp |
+++ b/Source/core/loader/cache/CachedResource.cpp |
@@ -161,6 +161,9 @@ CachedResource::~CachedResource() |
ASSERT(!m_deleted); |
ASSERT(url().isNull() || memoryCache()->resourceForURL(KURL(ParsedURLString, url())) != this); |
+ if (m_cancelTimer.isActive()) |
+ m_cancelTimer.stop(); |
abarth-chromium
2013/06/18 23:15:26
This doesn't happen automatically when the timer i
Nate Chapin
2013/06/18 23:24:48
Derp, I didn't look in Timer's base class :(
Will
|
+ |
#ifndef NDEBUG |
m_deleted = true; |
cachedResourceLeakCounter.decrement(); |
@@ -447,6 +450,8 @@ void CachedResource::removeClient(CachedResourceClient* client) |
void CachedResource::allClientsRemoved() |
{ |
+ if (!m_loader) |
+ return; |
if (m_type == MainResource || m_type == RawResource) |
cancelTimerFired(&m_cancelTimer); |
else if (!m_cancelTimer.isActive()) |
@@ -459,6 +464,8 @@ void CachedResource::cancelTimerFired(Timer<CachedResource>* timer) |
if (hasClients() || !m_loader) |
return; |
m_loader->cancelIfNotFinishing(); |
+ if (m_status != Cached) |
+ memoryCache()->remove(this); |
} |
void CachedResource::destroyDecodedDataIfNeeded() |