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