Commit a16df9db authored by zerny@chromium.org's avatar zerny@chromium.org

Oilpan: Make MediaControllers ExecutionContext a weak pointer.

Cause of a flaky ASAN use-after-poison in media/video-frame-accurate-seek.html

R=ager@chromium.org, haraken@chromium.org
BUG=

Review URL: https://codereview.chromium.org/333813004

git-svn-id: svn://svn.chromium.org/blink/trunk@176111 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 0763fa57
...@@ -3190,8 +3190,12 @@ bool HTMLMediaElement::hasPendingActivity() const ...@@ -3190,8 +3190,12 @@ bool HTMLMediaElement::hasPendingActivity() const
void HTMLMediaElement::contextDestroyed() void HTMLMediaElement::contextDestroyed()
{ {
// With Oilpan the ExecutionContext is weakly referenced from the media
// controller and so it will clear itself on destruction.
#if !ENABLE(OILPAN)
if (m_mediaController) if (m_mediaController)
m_mediaController->clearExecutionContext(); m_mediaController->clearExecutionContext();
#endif
ActiveDOMObject::contextDestroyed(); ActiveDOMObject::contextDestroyed();
} }
......
...@@ -613,6 +613,7 @@ void MediaController::trace(Visitor* visitor) ...@@ -613,6 +613,7 @@ void MediaController::trace(Visitor* visitor)
{ {
visitor->trace(m_mediaElements); visitor->trace(m_mediaElements);
visitor->trace(m_pendingEventsQueue); visitor->trace(m_pendingEventsQueue);
visitor->trace(m_executionContext);
EventTargetWithInlineData::trace(visitor); EventTargetWithInlineData::trace(visitor);
} }
......
...@@ -84,7 +84,9 @@ public: ...@@ -84,7 +84,9 @@ public:
bool isRestrained() const; bool isRestrained() const;
bool isBlocked() const; bool isBlocked() const;
void clearExecutionContext() { m_executionContext = 0; } #if !ENABLE(OILPAN)
void clearExecutionContext() { m_executionContext = nullptr; }
#endif
virtual void trace(Visitor*) OVERRIDE; virtual void trace(Visitor*) OVERRIDE;
...@@ -124,7 +126,7 @@ private: ...@@ -124,7 +126,7 @@ private:
OwnPtrWillBeMember<GenericEventQueue> m_pendingEventsQueue; OwnPtrWillBeMember<GenericEventQueue> m_pendingEventsQueue;
mutable Timer<MediaController> m_clearPositionTimer; mutable Timer<MediaController> m_clearPositionTimer;
OwnPtr<Clock> m_clock; OwnPtr<Clock> m_clock;
ExecutionContext* m_executionContext; RawPtrWillBeWeakMember<ExecutionContext> m_executionContext;
Timer<MediaController> m_timeupdateTimer; Timer<MediaController> m_timeupdateTimer;
double m_previousTimeupdateTime; double m_previousTimeupdateTime;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment