Chromium Code Reviews| 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() |