Title: [212716] trunk/Source/WebCore
Revision
212716
Author
[email protected]
Date
2017-02-21 09:25:02 -0800 (Tue, 21 Feb 2017)

Log Message

Make TrackPrivateBase ThreadSafeRefCounted, so that it can be retained in non-main threads
https://bugs.webkit.org/show_bug.cgi?id=168642

Reviewed by Eric Carlson.

AudioTrackPrivateMediaStreamCocoa has two entry points from background threads:
audioSamplesAvailable() and render(). Protect against being destroyed mid-execution by
retaining this for the duration of those methods.

* platform/graphics/TrackPrivateBase.h:
* platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
(WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
(WebCore::AudioTrackPrivateMediaStreamCocoa::render):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (212715 => 212716)


--- trunk/Source/WebCore/ChangeLog	2017-02-21 17:24:34 UTC (rev 212715)
+++ trunk/Source/WebCore/ChangeLog	2017-02-21 17:25:02 UTC (rev 212716)
@@ -1,5 +1,21 @@
 2017-02-21  Jer Noble  <[email protected]>
 
+        Make TrackPrivateBase ThreadSafeRefCounted, so that it can be retained in non-main threads
+        https://bugs.webkit.org/show_bug.cgi?id=168642
+
+        Reviewed by Eric Carlson.
+
+        AudioTrackPrivateMediaStreamCocoa has two entry points from background threads:
+        audioSamplesAvailable() and render(). Protect against being destroyed mid-execution by
+        retaining this for the duration of those methods.
+
+        * platform/graphics/TrackPrivateBase.h:
+        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
+        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
+        (WebCore::AudioTrackPrivateMediaStreamCocoa::render):
+
+2017-02-21  Jer Noble  <[email protected]>
+
         Pulling too quickly from an AudioSampleDataSource should increase the pre-buffer amount
         https://bugs.webkit.org/show_bug.cgi?id=168645
 

Modified: trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h (212715 => 212716)


--- trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h	2017-02-21 17:24:34 UTC (rev 212715)
+++ trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h	2017-02-21 17:25:02 UTC (rev 212716)
@@ -30,6 +30,7 @@
 #if ENABLE(VIDEO_TRACK)
 
 #include <wtf/MediaTime.h>
+#include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/text/AtomicString.h>
 
 namespace WebCore {
@@ -43,7 +44,7 @@
     virtual void willRemove() = 0;
 };
 
-class TrackPrivateBase : public RefCounted<TrackPrivateBase> {
+class TrackPrivateBase : public ThreadSafeRefCounted<TrackPrivateBase> {
     WTF_MAKE_NONCOPYABLE(TrackPrivateBase);
     WTF_MAKE_FAST_ALLOCATED;
 public:

Modified: trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp (212715 => 212716)


--- trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp	2017-02-21 17:24:34 UTC (rev 212715)
+++ trunk/Source/WebCore/platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp	2017-02-21 17:25:02 UTC (rev 212716)
@@ -180,6 +180,7 @@
 
 void AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable(const MediaTime& sampleTime, const PlatformAudioData& audioData, const AudioStreamDescription& description, size_t sampleCount)
 {
+    Ref<AudioTrackPrivateMediaStreamCocoa> protectedThis { *this };
     ASSERT(description.platformDescription().type == PlatformDescription::CAAudioStreamBasicType);
 
     std::lock_guard<Lock> lock(m_internalStateLock);
@@ -228,6 +229,8 @@
 
 OSStatus AudioTrackPrivateMediaStreamCocoa::render(UInt32 sampleCount, AudioBufferList& ioData, UInt32 /*inBusNumber*/, const AudioTimeStamp& timeStamp, AudioUnitRenderActionFlags& actionFlags)
 {
+    Ref<AudioTrackPrivateMediaStreamCocoa> protectedThis { *this };
+
     std::unique_lock<Lock> lock(m_internalStateLock, std::try_to_lock);
     if (!lock.owns_lock())
         return kAudioConverterErr_UnspecifiedError;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to