Changeset 247354 in webkit


Ignore:
Timestamp:
Jul 11, 2019 10:10:52 AM (5 years ago)
Author:
Chris Dumez
Message:

Fix non thread-safe usage of makeWeakPtr() in MediaPlayerPrivateMediaFoundation
https://bugs.webkit.org/show_bug.cgi?id=199700

Reviewed by Eric Carlson.

The code was calling makeWeakPtr() on a main-thread object, from a background thread.
This is not thread safe. To address the issue, this patches creates the WeakPtr ahead
of time, on the main thread.

  • platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:

(WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
(WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
(WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
(WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):

  • platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

(WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::create):
(WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::wrapped):
(WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::ThreadSafeWrapper):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r247350 r247354  
     12019-07-11  Chris Dumez  <cdumez@apple.com>
     2
     3        Fix non thread-safe usage of makeWeakPtr() in MediaPlayerPrivateMediaFoundation
     4        https://bugs.webkit.org/show_bug.cgi?id=199700
     5
     6        Reviewed by Eric Carlson.
     7
     8        The code was calling makeWeakPtr() on a main-thread object, from a background thread.
     9        This is not thread safe. To address the issue, this patches creates the WeakPtr ahead
     10        of time, on the main thread.
     11
     12        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
     13        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
     14        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
     15        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
     16        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
     17        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
     18        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::create):
     19        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::wrapped):
     20        (WebCore::MediaPlayerPrivateMediaFoundation::ThreadSafeWrapper::ThreadSafeWrapper):
     21
    1222019-07-11  Zalan Bujtas  <zalan@apple.com>
    223
  • trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp

    r246919 r247354  
    5959
    6060MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation(MediaPlayer* player)
    61     : m_player(player)
     61    : m_weakThis(makeWeakPtr(this))
     62    , m_player(player)
    6263    , m_visible(false)
    6364    , m_loadingProgress(false)
     
    426427    m_loadingProgress = SUCCEEDED(hr);
    427428
    428     callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     429    callOnMainThread([weakPtr = m_weakThis] {
    429430        if (!weakPtr)
    430431            return;
     
    455456    switch (mediaEventType) {
    456457    case MESessionTopologySet: {
    457         callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     458        callOnMainThread([weakPtr = m_weakThis] {
    458459            if (!weakPtr)
    459460                return;
     
    464465
    465466    case MESessionStarted: {
    466         callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     467        callOnMainThread([weakPtr = m_weakThis] {
    467468            if (!weakPtr)
    468469                return;
     
    473474
    474475    case MEBufferingStarted: {
    475         callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     476        callOnMainThread([weakPtr = m_weakThis] {
    476477            if (!weakPtr)
    477478                return;
     
    482483
    483484    case MEBufferingStopped: {
    484         callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     485        callOnMainThread([weakPtr = m_weakThis] {
    485486            if (!weakPtr)
    486487                return;
     
    491492
    492493    case MESessionEnded: {
    493         callOnMainThread([weakPtr = makeWeakPtr(*this)] {
     494        callOnMainThread([weakPtr = m_weakThis] {
    494495            if (!weakPtr)
    495496                return;
  • trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h

    r246302 r247354  
    102102
    103103private:
     104    WeakPtr<MediaPlayerPrivateMediaFoundation> m_weakThis;
    104105    MediaPlayer* m_player;
    105106    IntSize m_size;
Note: See TracChangeset for help on using the changeset viewer.