Title: [247354] trunk/Source/WebCore
Revision
247354
Author
cdu...@apple.com
Date
2019-07-11 10:10:52 -0700 (Thu, 11 Jul 2019)

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

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (247353 => 247354)


--- trunk/Source/WebCore/ChangeLog	2019-07-11 17:08:30 UTC (rev 247353)
+++ trunk/Source/WebCore/ChangeLog	2019-07-11 17:10:52 UTC (rev 247354)
@@ -1,3 +1,24 @@
+2019-07-11  Chris Dumez  <cdu...@apple.com>
+
+        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):
+
 2019-07-11  Zalan Bujtas  <za...@apple.com>
 
         [LFC][IFC] Cleanup InlineFormattingContext::LineLayout class.

Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp (247353 => 247354)


--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp	2019-07-11 17:08:30 UTC (rev 247353)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp	2019-07-11 17:10:52 UTC (rev 247354)
@@ -58,7 +58,8 @@
 namespace WebCore {
 
 MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation(MediaPlayer* player) 
-    : m_player(player)
+    : m_weakThis(makeWeakPtr(this))
+    , m_player(player)
     , m_visible(false)
     , m_loadingProgress(false)
     , m_paused(true)
@@ -425,7 +426,7 @@
     hr = asyncResult->GetStatus();
     m_loadingProgress = SUCCEEDED(hr);
 
-    callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+    callOnMainThread([weakPtr = m_weakThis] {
         if (!weakPtr)
             return;
         weakPtr->onCreatedMediaSource();
@@ -454,7 +455,7 @@
 
     switch (mediaEventType) {
     case MESessionTopologySet: {
-        callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+        callOnMainThread([weakPtr = m_weakThis] {
             if (!weakPtr)
                 return;
             weakPtr->onTopologySet();
@@ -463,7 +464,7 @@
     }
 
     case MESessionStarted: {
-        callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+        callOnMainThread([weakPtr = m_weakThis] {
             if (!weakPtr)
                 return;
             weakPtr->onSessionStarted();
@@ -472,7 +473,7 @@
     }
 
     case MEBufferingStarted: {
-        callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+        callOnMainThread([weakPtr = m_weakThis] {
             if (!weakPtr)
                 return;
             weakPtr->onBufferingStarted();
@@ -481,7 +482,7 @@
     }
 
     case MEBufferingStopped: {
-        callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+        callOnMainThread([weakPtr = m_weakThis] {
             if (!weakPtr)
                 return;
             weakPtr->onBufferingStopped();
@@ -490,7 +491,7 @@
     }
 
     case MESessionEnded: {
-        callOnMainThread([weakPtr = makeWeakPtr(*this)] {
+        callOnMainThread([weakPtr = m_weakThis] {
             if (!weakPtr)
                 return;
             weakPtr->onSessionEnded();

Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h (247353 => 247354)


--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h	2019-07-11 17:08:30 UTC (rev 247353)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h	2019-07-11 17:10:52 UTC (rev 247354)
@@ -101,6 +101,7 @@
     void paint(GraphicsContext&, const FloatRect&) override;
 
 private:
+    WeakPtr<MediaPlayerPrivateMediaFoundation> m_weakThis;
     MediaPlayer* m_player;
     IntSize m_size;
     bool m_visible;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to