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