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