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) |