Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(483)

Unified Diff: Source/core/fetch/Resource.cpp

Issue 210293005: Resource: Add more crash preventing assertions (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/fetch/Resource.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/Resource.cpp
diff --git a/Source/core/fetch/Resource.cpp b/Source/core/fetch/Resource.cpp
index ccfae0cb54558d718362deaf03555fdf3d220000..fcbb7ce19a58503553f48890fe1d515554b2bdd0 100644
--- a/Source/core/fetch/Resource.cpp
+++ b/Source/core/fetch/Resource.cpp
@@ -114,7 +114,7 @@ Resource::Resource(const ResourceRequest& request, Type type)
, m_status(Pending)
, m_wasPurged(false)
, m_needsSynchronousCacheHit(false)
-#ifndef NDEBUG
+#ifdef ENABLE_RESOURCE_IS_DELETED_CHECK
, m_deleted(false)
#endif
, m_resourceToRevalidate(0)
@@ -140,11 +140,13 @@ Resource::~Resource()
ASSERT(canDelete());
RELEASE_ASSERT(!memoryCache()->contains(this));
RELEASE_ASSERT(!ResourceCallback::callbackHandler()->isScheduled(this));
- ASSERT(!m_deleted);
ASSERT(url().isNull() || memoryCache()->resourceForURL(KURL(ParsedURLString, url())) != this);
+ assertAlive();
-#ifndef NDEBUG
+#ifdef ENABLE_RESOURCE_IS_DELETED_CHECK
m_deleted = true;
+#endif
+#ifndef NDEBUG
cachedResourceLeakCounter.decrement();
#endif
}
@@ -733,7 +735,7 @@ void Resource::revalidationSucceeded(const ResourceResponse& response)
memoryCache()->replace(m_resourceToRevalidate, this);
switchClientsToRevalidatedResource();
- ASSERT(!m_deleted);
+ assertAlive();
// clearResourceToRevalidate deletes this.
clearResourceToRevalidate();
}
@@ -748,6 +750,7 @@ void Resource::revalidationFailed()
void Resource::registerHandle(ResourcePtrBase* h)
{
+ assertAlive();
++m_handleCount;
if (m_resourceToRevalidate)
m_handlesToRevalidate.add(h);
@@ -755,6 +758,7 @@ void Resource::registerHandle(ResourcePtrBase* h)
void Resource::unregisterHandle(ResourcePtrBase* h)
{
+ assertAlive();
ASSERT(m_handleCount > 0);
--m_handleCount;
@@ -847,11 +851,13 @@ void Resource::ResourceCallback::schedule(Resource* resource)
{
if (!m_callbackTimer.isActive())
m_callbackTimer.startOneShot(0, FROM_HERE);
+ resource->assertAlive();
m_resourcesWithPendingClients.add(resource);
}
void Resource::ResourceCallback::cancel(Resource* resource)
{
+ resource->assertAlive();
m_resourcesWithPendingClients.remove(resource);
if (m_callbackTimer.isActive() && m_resourcesWithPendingClients.isEmpty())
m_callbackTimer.stop();
@@ -869,8 +875,15 @@ void Resource::ResourceCallback::timerFired(Timer<ResourceCallback>*)
for (HashSet<Resource*>::iterator it = m_resourcesWithPendingClients.begin(); it != end; ++it)
resources.append(*it);
m_resourcesWithPendingClients.clear();
- for (size_t i = 0; i < resources.size(); i++)
+
+ for (size_t i = 0; i < resources.size(); i++) {
+ resources[i]->assertAlive();
resources[i]->finishPendingClients();
+ resources[i]->assertAlive();
+ }
+
+ for (size_t i = 0; i < resources.size(); i++)
+ resources[i]->assertAlive();
}
static const char* initatorTypeNameToString(const AtomicString& initiatorTypeName)
« no previous file with comments | « Source/core/fetch/Resource.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698