Title: [277875] trunk/Source
Revision
277875
Author
cdu...@apple.com
Date
2021-05-21 12:24:05 -0700 (Fri, 21 May 2021)

Log Message

Use CheckedLock more in cases where we try-lock
https://bugs.webkit.org/show_bug.cgi?id=226056

Reviewed by Alex Christensen.

Use CheckedLock more in cases where we try-lock to benefit from Clang
Thread Safety Analysis.

Source/WebCore:

* Modules/webaudio/AudioParamTimeline.cpp:
(WebCore::AudioParamTimeline::setValueAtTime):
(WebCore::AudioParamTimeline::linearRampToValueAtTime):
(WebCore::AudioParamTimeline::exponentialRampToValueAtTime):
(WebCore::AudioParamTimeline::setTargetAtTime):
(WebCore::AudioParamTimeline::setValueCurveAtTime):
(WebCore::AudioParamTimeline::cancelScheduledValues):
(WebCore::AudioParamTimeline::cancelAndHoldAtTime):
(WebCore::AudioParamTimeline::valueForContextTime):
(WebCore::AudioParamTimeline::valuesForFrameRange):
(WebCore::AudioParamTimeline::hasValues const):
* Modules/webaudio/AudioParamTimeline.h:
* platform/audio/AudioDestination.h:
(WebCore::AudioDestination::WTF_GUARDED_BY_LOCK):
(WebCore::AudioDestination::AudioDestination):
(WebCore::AudioDestination::clearCallback):
(WebCore::AudioDestination::callRenderCallback):
* platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
(WebCore::AudioMediaStreamTrackRendererUnit::addSource):
(WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
(WebCore::AudioMediaStreamTrackRendererUnit::render):
* platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:

Source/WebKit:

* WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
(WebKit::LibWebRTCCodecs::releaseDecoder):
(WebKit::LibWebRTCCodecs::registerDecodeFrameCallback):
(WebKit::LibWebRTCCodecs::completedDecoding):
(WebKit::LibWebRTCCodecs::releaseEncoder):
(WebKit::LibWebRTCCodecs::registerEncodeFrameCallback):
(WebKit::LibWebRTCCodecs::completedEncoding):
* WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
(WebKit::LibWebRTCCodecs::Decoder::WTF_GUARDED_BY_LOCK):
(WebKit::LibWebRTCCodecs::Encoder::WTF_GUARDED_BY_LOCK):

Source/WTF:

* wtf/Logger.cpp:
* wtf/Logger.h:
(WTF::Logger::addObserver):
(WTF::Logger::removeObserver):
(WTF::Logger::log):
(WTF::Logger::logVerbose):
(WTF::Logger::WTF_RETURNS_LOCK):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (277874 => 277875)


--- trunk/Source/WTF/ChangeLog	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WTF/ChangeLog	2021-05-21 19:24:05 UTC (rev 277875)
@@ -1,3 +1,21 @@
+2021-05-21  Chris Dumez  <cdu...@apple.com>
+
+        Use CheckedLock more in cases where we try-lock
+        https://bugs.webkit.org/show_bug.cgi?id=226056
+
+        Reviewed by Alex Christensen.
+
+        Use CheckedLock more in cases where we try-lock to benefit from Clang
+        Thread Safety Analysis.
+
+        * wtf/Logger.cpp:
+        * wtf/Logger.h:
+        (WTF::Logger::addObserver):
+        (WTF::Logger::removeObserver):
+        (WTF::Logger::log):
+        (WTF::Logger::logVerbose):
+        (WTF::Logger::WTF_RETURNS_LOCK):
+
 2021-05-20  Chris Dumez  <cdu...@apple.com>
 
         Use CheckedLock more in WTF

Modified: trunk/Source/WTF/wtf/Logger.cpp (277874 => 277875)


--- trunk/Source/WTF/wtf/Logger.cpp	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WTF/wtf/Logger.cpp	2021-05-21 19:24:05 UTC (rev 277875)
@@ -32,7 +32,7 @@
 
 namespace WTF {
 
-Lock loggerObserverLock;
+CheckedLock loggerObserverLock;
 
 String Logger::LogSiteIdentifier::toString() const
 {

Modified: trunk/Source/WTF/wtf/Logger.h (277874 => 277875)


--- trunk/Source/WTF/wtf/Logger.h	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WTF/wtf/Logger.h	2021-05-21 19:24:05 UTC (rev 277875)
@@ -25,7 +25,7 @@
 
 #pragma once
 
-#include <wtf/Lock.h>
+#include <wtf/CheckedLock.h>
 #include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/text/StringBuilder.h>
 
@@ -112,7 +112,7 @@
     }
 };
 
-WTF_EXPORT_PRIVATE extern Lock loggerObserverLock;
+WTF_EXPORT_PRIVATE extern CheckedLock loggerObserverLock;
 
 class Logger : public ThreadSafeRefCounted<Logger> {
     WTF_MAKE_NONCOPYABLE(Logger);
@@ -285,12 +285,12 @@
 
     static inline void addObserver(Observer& observer)
     {
-        auto lock = holdLock(observerLock());
+        Locker locker { observerLock() };
         observers().append(observer);
     }
     static inline void removeObserver(Observer& observer)
     {
-        auto lock = holdLock(observerLock());
+        Locker locker { observerLock() };
         observers().removeFirstMatching([&observer](auto anObserver) {
             return &anObserver.get() == &observer;
         });
@@ -322,10 +322,10 @@
         if (channel.state == WTFLogChannelState::Off || level > channel.level)
             return;
 
-        auto lock = tryHoldLock(observerLock());
-        if (!lock)
+        if (!observerLock().tryLock())
             return;
 
+        Locker locker { AdoptLockTag { }, observerLock() };
         for (Observer& observer : observers())
             observer.didLogMessage(channel, level, { ConsoleLogValue<Argument>::toValue(arguments)... });
     }
@@ -353,17 +353,17 @@
         if (channel.state == WTFLogChannelState::Off || level > channel.level)
             return;
 
-        auto lock = tryHoldLock(observerLock());
-        if (!lock)
+        if (!observerLock().tryLock())
             return;
 
+        Locker locker { AdoptLockTag { }, observerLock() };
         for (Observer& observer : observers())
             observer.didLogMessage(channel, level, { ConsoleLogValue<Argument>::toValue(arguments)... });
     }
 
-    WTF_EXPORT_PRIVATE static Vector<std::reference_wrapper<Observer>>& observers();
+    WTF_EXPORT_PRIVATE static Vector<std::reference_wrapper<Observer>>& observers() WTF_REQUIRES_LOCK(observerLock());
 
-    static Lock& observerLock()
+    static CheckedLock& observerLock() WTF_RETURNS_LOCK(loggerObserverLock)
     {
         return loggerObserverLock;
     }

Modified: trunk/Source/WebCore/ChangeLog (277874 => 277875)


--- trunk/Source/WebCore/ChangeLog	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebCore/ChangeLog	2021-05-21 19:24:05 UTC (rev 277875)
@@ -1,3 +1,36 @@
+2021-05-21  Chris Dumez  <cdu...@apple.com>
+
+        Use CheckedLock more in cases where we try-lock
+        https://bugs.webkit.org/show_bug.cgi?id=226056
+
+        Reviewed by Alex Christensen.
+
+        Use CheckedLock more in cases where we try-lock to benefit from Clang
+        Thread Safety Analysis.
+
+        * Modules/webaudio/AudioParamTimeline.cpp:
+        (WebCore::AudioParamTimeline::setValueAtTime):
+        (WebCore::AudioParamTimeline::linearRampToValueAtTime):
+        (WebCore::AudioParamTimeline::exponentialRampToValueAtTime):
+        (WebCore::AudioParamTimeline::setTargetAtTime):
+        (WebCore::AudioParamTimeline::setValueCurveAtTime):
+        (WebCore::AudioParamTimeline::cancelScheduledValues):
+        (WebCore::AudioParamTimeline::cancelAndHoldAtTime):
+        (WebCore::AudioParamTimeline::valueForContextTime):
+        (WebCore::AudioParamTimeline::valuesForFrameRange):
+        (WebCore::AudioParamTimeline::hasValues const):
+        * Modules/webaudio/AudioParamTimeline.h:
+        * platform/audio/AudioDestination.h:
+        (WebCore::AudioDestination::WTF_GUARDED_BY_LOCK):
+        (WebCore::AudioDestination::AudioDestination):
+        (WebCore::AudioDestination::clearCallback):
+        (WebCore::AudioDestination::callRenderCallback):
+        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
+        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
+        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
+        (WebCore::AudioMediaStreamTrackRendererUnit::render):
+        * platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
+
 2021-05-21  Per Arne  <pvol...@apple.com>
 
         Accessibility caption styles does not always reflect the selection

Modified: trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp (277874 => 277875)


--- trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp	2021-05-21 19:24:05 UTC (rev 277875)
@@ -73,13 +73,13 @@
 
 ExceptionOr<void> AudioParamTimeline::setValueAtTime(float value, Seconds time)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
     return insertEvent(ParamEvent::createSetValueEvent(value, time));
 }
 
 ExceptionOr<void> AudioParamTimeline::linearRampToValueAtTime(float targetValue, Seconds endTime, float currentValue, Seconds currentTime)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
 
     // Linear ramp events need a preceding event so that they have an initial value.
     if (m_events.isEmpty())
@@ -90,7 +90,7 @@
 
 ExceptionOr<void> AudioParamTimeline::exponentialRampToValueAtTime(float targetValue, Seconds endTime, float currentValue, Seconds currentTime)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
 
     // Exponential ramp events need a preceding event so that they have an initial value.
     if (m_events.isEmpty())
@@ -101,7 +101,7 @@
 
 ExceptionOr<void> AudioParamTimeline::setTargetAtTime(float target, Seconds time, float timeConstant)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
     // If timeConstant is 0, we instantly jump to the target value, so insert a SetValueEvent instead of SetTargetEvent.
     if (!timeConstant)
         return insertEvent(ParamEvent::createSetValueEvent(target, time));
@@ -110,7 +110,7 @@
 
 ExceptionOr<void> AudioParamTimeline::setValueCurveAtTime(Vector<float>&& curve, Seconds time, Seconds duration)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
 
     float curveEndValue = curve.last();
     auto result = insertEvent(ParamEvent::createSetValueCurveEvent(WTFMove(curve), time, duration));
@@ -186,7 +186,7 @@
 
 void AudioParamTimeline::cancelScheduledValues(Seconds cancelTime)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
 
     // Remove all events whose start time is greater than or equal to the cancel time.
     // Also handle the special case where the cancel time lies in the middle of a
@@ -215,7 +215,7 @@
 
 ExceptionOr<void> AudioParamTimeline::cancelAndHoldAtTime(Seconds cancelTime)
 {
-    auto locker = holdLock(m_eventsLock);
+    Locker locker { m_eventsLock };
 
     // Find the first event at or just past cancelTime.
     size_t i = m_events.findMatching([&](auto& event) {
@@ -327,9 +327,11 @@
 Optional<float> AudioParamTimeline::valueForContextTime(BaseAudioContext& context, float defaultValue, float minValue, float maxValue)
 {
     {
-        auto locker = tryHoldLock(m_eventsLock);
-        if (!locker || !m_events.size() || Seconds { context.currentTime() } < m_events[0].time())
+        if (!m_eventsLock.tryLock())
             return WTF::nullopt;
+        Locker locker { AdoptLockTag { }, m_eventsLock };
+        if (!m_events.size() || Seconds { context.currentTime() } < m_events[0].time())
+            return WTF::nullopt;
     }
 
     // Ask for just a single value.
@@ -345,11 +347,11 @@
 float AudioParamTimeline::valuesForFrameRange(size_t startFrame, size_t endFrame, float defaultValue, float minValue, float maxValue, float* values, unsigned numberOfValues, double sampleRate, double controlRate)
 {
     // We can't contend the lock in the realtime audio thread.
-    auto locker = tryHoldLock(m_eventsLock);
-    if (!locker) {
+    if (!m_eventsLock.tryLock()) {
         std::fill_n(values, numberOfValues, defaultValue);
         return defaultValue;
     }
+    Locker locker { AdoptLockTag { }, m_eventsLock };
 
     float value = valuesForFrameRangeImpl(startFrame, endFrame, defaultValue, values, numberOfValues, sampleRate, controlRate);
 
@@ -984,9 +986,9 @@
 
 bool AudioParamTimeline::hasValues(size_t startFrame, double sampleRate) const
 {
-    auto locker = tryHoldLock(m_eventsLock);
-    if (!locker)
+    if (!m_eventsLock.tryLock())
         return true;
+    Locker locker { AdoptLockTag { }, m_eventsLock };
 
     // Return false if there are no events in the time range.
     auto endFrame = startFrame + AudioUtilities::renderQuantumSize;

Modified: trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h (277874 => 277875)


--- trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.h	2021-05-21 19:24:05 UTC (rev 277875)
@@ -30,7 +30,7 @@
 
 #include "AudioContext.h"
 #include <_javascript_Core/Float32Array.h>
-#include <wtf/Lock.h>
+#include <wtf/CheckedLock.h>
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -189,9 +189,9 @@
         const int eventIndex;
     };
 
-    void removeCancelledEvents(size_t firstEventToRemove);
-    ExceptionOr<void> insertEvent(ParamEvent&&);
-    float valuesForFrameRangeImpl(size_t startFrame, size_t endFrame, float defaultValue, float* values, unsigned numberOfValues, double sampleRate, double controlRate);
+    void removeCancelledEvents(size_t firstEventToRemove) WTF_REQUIRES_LOCK(m_eventsLock);
+    ExceptionOr<void> insertEvent(ParamEvent&&) WTF_REQUIRES_LOCK(m_eventsLock);
+    float valuesForFrameRangeImpl(size_t startFrame, size_t endFrame, float defaultValue, float* values, unsigned numberOfValues, double sampleRate, double controlRate) WTF_REQUIRES_LOCK(m_eventsLock);
     float linearRampAtTime(Seconds t, float value1, Seconds time1, float value2, Seconds time2);
     float exponentialRampAtTime(Seconds t, float value1, Seconds time1, float value2, Seconds time2);
     float valueCurveAtTime(Seconds t, Seconds time1, Seconds duration, const float* curveData, size_t curveLength);
@@ -200,14 +200,14 @@
 
     void processLinearRamp(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex);
     void processExponentialRamp(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex);
-    void processCancelValues(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex);
+    void processCancelValues(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex) WTF_REQUIRES_LOCK(m_eventsLock);
     void processSetTarget(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex);
     void processSetValueCurve(const AutomationState&, float* values, size_t& currentFrame, float& value, unsigned& writeIndex);
-    void processSetTargetFollowedByRamp(int eventIndex, ParamEvent*&, ParamEvent::Type nextEventType, size_t currentFrame, double samplingPeriod, double controlRate, float& value);
+    void processSetTargetFollowedByRamp(int eventIndex, ParamEvent*&, ParamEvent::Type nextEventType, size_t currentFrame, double samplingPeriod, double controlRate, float& value) WTF_REQUIRES_LOCK(m_eventsLock);
 
-    Vector<ParamEvent> m_events;
+    Vector<ParamEvent> m_events WTF_GUARDED_BY_LOCK(m_eventsLock);
 
-    mutable Lock m_eventsLock;
+    mutable CheckedLock m_eventsLock;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/audio/AudioDestination.h (277874 => 277875)


--- trunk/Source/WebCore/platform/audio/AudioDestination.h	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebCore/platform/audio/AudioDestination.h	2021-05-21 19:24:05 UTC (rev 277875)
@@ -32,6 +32,7 @@
 #include "AudioBus.h"
 #include "AudioIOCallback.h"
 #include <memory>
+#include <wtf/CheckedLock.h>
 #include <wtf/CompletionHandler.h>
 #include <wtf/Lock.h>
 #include <wtf/ThreadSafeRefCounted.h>
@@ -77,30 +78,32 @@
 protected:
     explicit AudioDestination(AudioIOCallback&);
 
-    Lock m_callbackLock;
-    AudioIOCallback* m_callback { nullptr };
+    CheckedLock m_callbackLock;
+    AudioIOCallback* m_callback WTF_GUARDED_BY_LOCK(m_callbackLock) { nullptr };
 };
 
 inline AudioDestination::AudioDestination(AudioIOCallback& callback)
 {
-    auto locker = holdLock(m_callbackLock);
+    Locker locker { m_callbackLock };
     m_callback = &callback;
 }
 
 inline void AudioDestination::clearCallback()
 {
-    auto locker = holdLock(m_callbackLock);
+    Locker locker { m_callbackLock };
     m_callback = nullptr;
 }
 
 inline void AudioDestination::callRenderCallback(AudioBus* sourceBus, AudioBus* destinationBus, size_t framesToProcess, const AudioIOPosition& outputPosition)
 {
-    auto locker = tryHoldLock(m_callbackLock);
-    if (!locker || !m_callback) {
-        destinationBus->zero();
-        return;
+    if (m_callbackLock.tryLock()) {
+        Locker locker { AdoptLockTag { }, m_callbackLock };
+        if (m_callback) {
+            m_callback->render(sourceBus, destinationBus, framesToProcess, outputPosition);
+            return;
+        }
     }
-    m_callback->render(sourceBus, destinationBus, framesToProcess, outputPosition);
+    destinationBus->zero();
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp (277874 => 277875)


--- trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp	2021-05-21 19:24:05 UTC (rev 277875)
@@ -160,7 +160,7 @@
     }
 
     {
-        auto locker = holdLock(m_callbackLock);
+        Locker locker { m_callbackLock };
         if (m_callback)
             m_callback->isPlayingDidChange();
     }

Modified: trunk/Source/WebKit/ChangeLog (277874 => 277875)


--- trunk/Source/WebKit/ChangeLog	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebKit/ChangeLog	2021-05-21 19:24:05 UTC (rev 277875)
@@ -1,3 +1,24 @@
+2021-05-21  Chris Dumez  <cdu...@apple.com>
+
+        Use CheckedLock more in cases where we try-lock
+        https://bugs.webkit.org/show_bug.cgi?id=226056
+
+        Reviewed by Alex Christensen.
+
+        Use CheckedLock more in cases where we try-lock to benefit from Clang
+        Thread Safety Analysis.
+
+        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
+        (WebKit::LibWebRTCCodecs::releaseDecoder):
+        (WebKit::LibWebRTCCodecs::registerDecodeFrameCallback):
+        (WebKit::LibWebRTCCodecs::completedDecoding):
+        (WebKit::LibWebRTCCodecs::releaseEncoder):
+        (WebKit::LibWebRTCCodecs::registerEncodeFrameCallback):
+        (WebKit::LibWebRTCCodecs::completedEncoding):
+        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
+        (WebKit::LibWebRTCCodecs::Decoder::WTF_GUARDED_BY_LOCK):
+        (WebKit::LibWebRTCCodecs::Encoder::WTF_GUARDED_BY_LOCK):
+
 2021-05-21  Per Arne  <pvol...@apple.com>
 
         Accessibility caption styles does not always reflect the selection

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp (277874 => 277875)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-05-21 19:24:05 UTC (rev 277875)
@@ -270,7 +270,12 @@
 
 int32_t LibWebRTCCodecs::releaseDecoder(Decoder& decoder)
 {
-    ASSERT(!decoder.decodedImageCallback);
+#if ASSERT_ENABLED
+    {
+        Locker locker { decoder.decodedImageCallbackLock };
+        ASSERT(!decoder.decodedImageCallback);
+    }
+#endif
     ensureGPUProcessConnectionAndDispatchToThread([this, decoderIdentifier = decoder.identifier] {
         ASSERT(m_decoders.contains(decoderIdentifier));
         if (auto decoder = m_decoders.take(decoderIdentifier)) {
@@ -298,7 +303,7 @@
 
 void LibWebRTCCodecs::registerDecodeFrameCallback(Decoder& decoder, void* decodedImageCallback)
 {
-    LockHolder holder(decoder.decodedImageCallbackLock);
+    Locker locker { decoder.decodedImageCallbackLock };
     decoder.decodedImageCallback = decodedImageCallback;
 }
 
@@ -319,10 +324,11 @@
     if (!decoder)
         return;
 
-    auto locker = tryHoldLock(decoder->decodedImageCallbackLock);
-    if (!locker)
+    if (!decoder->decodedImageCallbackLock.tryLock())
         return;
 
+    Locker locker { AdoptLockTag { }, decoder->decodedImageCallbackLock };
+
     if (!decoder->decodedImageCallback)
         return;
 
@@ -393,7 +399,12 @@
 
 int32_t LibWebRTCCodecs::releaseEncoder(Encoder& encoder)
 {
-    ASSERT(!encoder.encodedImageCallback);
+#if ASSERT_ENABLED
+    {
+        Locker locker { encoder.encodedImageCallbackLock };
+        ASSERT(!encoder.encodedImageCallback);
+    }
+#endif
     ensureGPUProcessConnectionAndDispatchToThread([this, encoderIdentifier = encoder.identifier] {
         ASSERT(m_encoders.contains(encoderIdentifier));
         auto encoder = m_encoders.take(encoderIdentifier);
@@ -454,7 +465,7 @@
 
 void LibWebRTCCodecs::registerEncodeFrameCallback(Encoder& encoder, void* encodedImageCallback)
 {
-    LockHolder holder(encoder.encodedImageCallbackLock);
+    Locker locker { encoder.encodedImageCallbackLock };
 
     encoder.encodedImageCallback = encodedImageCallback;
 }
@@ -481,10 +492,11 @@
     if (!encoder)
         return;
 
-    auto locker = tryHoldLock(encoder->encodedImageCallbackLock);
-    if (!locker)
+    if (!encoder->encodedImageCallbackLock.tryLock())
         return;
 
+    Locker locker { AdoptLockTag { }, encoder->encodedImageCallbackLock };
+
     if (!encoder->encodedImageCallback)
         return;
 

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h (277874 => 277875)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-05-21 19:04:39 UTC (rev 277874)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-05-21 19:24:05 UTC (rev 277875)
@@ -74,8 +74,8 @@
     public:
         RTCDecoderIdentifier identifier;
         Type type;
-        void* decodedImageCallback { nullptr };
-        Lock decodedImageCallbackLock;
+        void* decodedImageCallback WTF_GUARDED_BY_LOCK(decodedImageCallbackLock) { nullptr };
+        CheckedLock decodedImageCallbackLock;
         bool hasError { false };
         RefPtr<IPC::Connection> connection;
     };
@@ -100,8 +100,8 @@
         webrtc::VideoCodecType codecType { webrtc::kVideoCodecGeneric };
         Vector<std::pair<String, String>> parameters;
         Optional<EncoderInitializationData> initializationData;
-        void* encodedImageCallback { nullptr };
-        Lock encodedImageCallbackLock;
+        void* encodedImageCallback WTF_GUARDED_BY_LOCK(encodedImageCallbackLock) { nullptr };
+        CheckedLock encodedImageCallbackLock;
         RefPtr<IPC::Connection> connection;
     };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to