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

Unified Diff: Source/core/loader/ImageLoader.cpp

Issue 320253002: Oilpan: Prepare to move ImageLoader and its subclasses to Oilpan heap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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
Index: Source/core/loader/ImageLoader.cpp
diff --git a/Source/core/loader/ImageLoader.cpp b/Source/core/loader/ImageLoader.cpp
index f3f4e3ff57b6f34241bfc4592b3c115084178811..d47d0f822d7d599797e1c91bdfcfa911b2c847d1 100644
--- a/Source/core/loader/ImageLoader.cpp
+++ b/Source/core/loader/ImageLoader.cpp
@@ -122,11 +122,18 @@ ImageLoader::~ImageLoader()
ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this));
if (m_hasPendingErrorEvent)
errorEventSender().cancelEvent(this);
-
+#if !ENABLE(OILPAN)
// If the ImageLoader is being destroyed but it is still protecting its image-loading Element,
// remove that protection here.
if (m_elementIsProtected)
m_element->deref();
haraken 2014/06/09 11:12:33 It looks strange that we don't have corresponding
tkent 2014/06/10 01:43:09 The corresponding code is the destructor of m_keep
+#endif
+}
+
+void ImageLoader::trace(Visitor* visitor)
+{
+ visitor->trace(m_element);
+ visitor->trace(m_clients);
tkent 2014/06/10 01:43:09 Will remove this.
}
void ImageLoader::setImage(ImageResource* newImage)
@@ -413,10 +420,15 @@ void ImageLoader::updatedHasPendingEvent()
return;
if (m_elementIsProtected) {
- if (m_derefElementTimer.isActive())
+ if (m_derefElementTimer.isActive()) {
m_derefElementTimer.stop();
- else
+ } else {
+#if ENABLE(OILPAN)
+ m_keepAlive = this;
haraken 2014/06/09 11:12:34 I'm afraid this will cause memory leak. If timerFi
tkent 2014/06/10 01:43:09 I think timerFired() is always triggered. m_keepAl
haraken 2014/06/10 01:59:05 It's not clear to me if timerFired() is always tri
tkent 2014/06/10 02:37:59 If enable_oilpan=0 and the owner element releases
+#else
m_element->ref();
+#endif
+ }
} else {
ASSERT(!m_derefElementTimer.isActive());
m_derefElementTimer.startOneShot(0, FROM_HERE);
@@ -425,7 +437,11 @@ void ImageLoader::updatedHasPendingEvent()
void ImageLoader::timerFired(Timer<ImageLoader>*)
{
+#if ENABLE(OILPAN)
+ m_keepAlive.clear();
+#else
m_element->deref();
+#endif
}
void ImageLoader::dispatchPendingEvent(ImageEventSender* eventSender)

Powered by Google App Engine
This is Rietveld 408576698