Title: [272905] trunk/Source/WebKit
Revision
272905
Author
commit-qu...@webkit.org
Date
2021-02-16 08:10:54 -0800 (Tue, 16 Feb 2021)

Log Message

ThreadMessageReceiverRefCounted subclasses are accessed in non-thread-safe way
https://bugs.webkit.org/show_bug.cgi?id=221891

Patch by Kimmo Kinnunen <kkinnu...@apple.com> on 2021-02-16
Reviewed by Chris Dumez.

For each ThreadMessageReceiverRefCounted subclass, remove calls
to Connection::addThreadMessageReceiver() from the constructor.
The calls pass 'this' as the ThreadMessageReceiver*. If the
connection tries to dispatch a message during the constructor, this
results in some or all of below:
- non-thread-safe read of mutated virtual function pointer
- call to incorrect member function, mostly to MessageReceiver::didReceiveMessage
- an assert from above
- skipped message

For each ThreadMessageReceiverRefCounted subclass, remove calls
to Connection::removeThreadMessageReceiver() from the destructor.
The message receive destination is still active during destructor,
so Connection might dispatch new message tasks during that time.
This causes ref of the instance already being destroyed, which
then causes the tasks to use deleted instance and then later
deleting it again.

Does not try to fix any other potential thread-related issues in
the modified areas.

* GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp:
(WebKit::RemoteAudioMediaStreamTrackRendererManager::RemoteAudioMediaStreamTrackRendererManager):
(WebKit::RemoteAudioMediaStreamTrackRendererManager::startListeningForIPC):
(WebKit::RemoteAudioMediaStreamTrackRendererManager::close):
* GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h:
* GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp:
(WebKit::RemoteSampleBufferDisplayLayerManager::RemoteSampleBufferDisplayLayerManager):
(WebKit::RemoteSampleBufferDisplayLayerManager::startListeningForIPC):
(WebKit::RemoteSampleBufferDisplayLayerManager::close):
* GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
* NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::NetworkRTCProvider):
(WebKit::NetworkRTCProvider::startListeningForIPC):
* NetworkProcess/webrtc/NetworkRTCProvider.h:
(WebKit::NetworkRTCProvider::create):
* WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
(WebKit::LibWebRTCCodecs::LibWebRTCCodecs):
(WebKit::LibWebRTCCodecs::startListeningForIPC):
(WebKit::LibWebRTCCodecs::~LibWebRTCCodecs):
(WebKit::LibWebRTCCodecs::gpuProcessConnectionDidClose):
* WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
(WebKit::LibWebRTCCodecs::create):
* WebProcess/Network/webrtc/LibWebRTCNetwork.cpp:
(WebKit::LibWebRTCNetwork::~LibWebRTCNetwork):
* WebProcess/Network/webrtc/LibWebRTCNetwork.h:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::libWebRTCCodecs):
* WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
(WebKit::RemoteCaptureSampleManager::~RemoteCaptureSampleManager):
(WebKit::RemoteCaptureSampleManager::stopListeningForIPC):
* WebProcess/cocoa/RemoteCaptureSampleManager.h:
* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
* WebProcess/glib/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (272904 => 272905)


--- trunk/Source/WebKit/ChangeLog	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/ChangeLog	2021-02-16 16:10:54 UTC (rev 272905)
@@ -1,3 +1,67 @@
+2021-02-16  Kimmo Kinnunen  <kkinnu...@apple.com>
+
+        ThreadMessageReceiverRefCounted subclasses are accessed in non-thread-safe way
+        https://bugs.webkit.org/show_bug.cgi?id=221891
+
+        Reviewed by Chris Dumez.
+
+        For each ThreadMessageReceiverRefCounted subclass, remove calls
+        to Connection::addThreadMessageReceiver() from the constructor.
+        The calls pass 'this' as the ThreadMessageReceiver*. If the
+        connection tries to dispatch a message during the constructor, this
+        results in some or all of below:
+        - non-thread-safe read of mutated virtual function pointer
+        - call to incorrect member function, mostly to MessageReceiver::didReceiveMessage
+        - an assert from above
+        - skipped message
+
+        For each ThreadMessageReceiverRefCounted subclass, remove calls
+        to Connection::removeThreadMessageReceiver() from the destructor.
+        The message receive destination is still active during destructor,
+        so Connection might dispatch new message tasks during that time.
+        This causes ref of the instance already being destroyed, which
+        then causes the tasks to use deleted instance and then later
+        deleting it again.
+
+        Does not try to fix any other potential thread-related issues in
+        the modified areas.
+
+        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp:
+        (WebKit::RemoteAudioMediaStreamTrackRendererManager::RemoteAudioMediaStreamTrackRendererManager):
+        (WebKit::RemoteAudioMediaStreamTrackRendererManager::startListeningForIPC):
+        (WebKit::RemoteAudioMediaStreamTrackRendererManager::close):
+        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h:
+        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp:
+        (WebKit::RemoteSampleBufferDisplayLayerManager::RemoteSampleBufferDisplayLayerManager):
+        (WebKit::RemoteSampleBufferDisplayLayerManager::startListeningForIPC):
+        (WebKit::RemoteSampleBufferDisplayLayerManager::close):
+        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h:
+        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
+        (WebKit::NetworkRTCProvider::startListeningForIPC):
+        * NetworkProcess/webrtc/NetworkRTCProvider.h:
+        (WebKit::NetworkRTCProvider::create):
+        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
+        (WebKit::LibWebRTCCodecs::LibWebRTCCodecs):
+        (WebKit::LibWebRTCCodecs::startListeningForIPC):
+        (WebKit::LibWebRTCCodecs::~LibWebRTCCodecs):
+        (WebKit::LibWebRTCCodecs::gpuProcessConnectionDidClose):
+        * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
+        (WebKit::LibWebRTCCodecs::create):
+        * WebProcess/Network/webrtc/LibWebRTCNetwork.cpp:
+        (WebKit::LibWebRTCNetwork::~LibWebRTCNetwork):
+        * WebProcess/Network/webrtc/LibWebRTCNetwork.h:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::libWebRTCCodecs):
+        * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
+        (WebKit::RemoteCaptureSampleManager::~RemoteCaptureSampleManager):
+        (WebKit::RemoteCaptureSampleManager::stopListeningForIPC):
+        * WebProcess/cocoa/RemoteCaptureSampleManager.h:
+        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
+        * WebProcess/glib/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
+
 2021-02-16  Youenn Fablet  <you...@apple.com>
 
         Enable GPU WebRTC codecs in GPUProcess by default on iOS

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp (272904 => 272905)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -41,18 +41,20 @@
     : m_connectionToWebProcess(connectionToWebProcess)
     , m_queue(connectionToWebProcess.gpuProcess().audioMediaStreamTrackRendererQueue())
 {
+}
+
+void RemoteAudioMediaStreamTrackRendererManager::startListeningForIPC()
+{
     m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName(), this);
     m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName(), this);
 }
 
-RemoteAudioMediaStreamTrackRendererManager::~RemoteAudioMediaStreamTrackRendererManager()
+RemoteAudioMediaStreamTrackRendererManager::~RemoteAudioMediaStreamTrackRendererManager() = default;
+
+void RemoteAudioMediaStreamTrackRendererManager::close()
 {
     m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName());
     m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName());
-}
-
-void RemoteAudioMediaStreamTrackRendererManager::close()
-{
     dispatchToThread([this, protectedThis = makeRef(*this)] {
         m_renderers.clear();
     });

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h (272904 => 272905)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -45,7 +45,12 @@
 class RemoteAudioMediaStreamTrackRendererManager final : public IPC::Connection::ThreadMessageReceiverRefCounted {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    static Ref<RemoteAudioMediaStreamTrackRendererManager> create(GPUConnectionToWebProcess& process) { return adoptRef(*new RemoteAudioMediaStreamTrackRendererManager(process)); }
+    static Ref<RemoteAudioMediaStreamTrackRendererManager> create(GPUConnectionToWebProcess& process)
+    {
+        auto instance = adoptRef(*new RemoteAudioMediaStreamTrackRendererManager(process));
+        instance->startListeningForIPC();
+        return instance;
+    }
     ~RemoteAudioMediaStreamTrackRendererManager();
 
     void didReceiveRendererMessage(IPC::Connection&, IPC::Decoder&);
@@ -57,6 +62,7 @@
 
 private:
     explicit RemoteAudioMediaStreamTrackRendererManager(GPUConnectionToWebProcess&);
+    void startListeningForIPC();
 
     // IPC::Connection::ThreadMessageReceiver
     void dispatchToThread(Function<void()>&&) final;

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp (272904 => 272905)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -43,18 +43,20 @@
     , m_connection(gpuConnectionToWebProcess.connection())
     , m_queue(gpuConnectionToWebProcess.gpuProcess().videoMediaStreamTrackRendererQueue())
 {
+}
+
+void RemoteSampleBufferDisplayLayerManager::startListeningForIPC()
+{
     m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName(), this);
     m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName(), this);
 }
 
-RemoteSampleBufferDisplayLayerManager::~RemoteSampleBufferDisplayLayerManager()
+RemoteSampleBufferDisplayLayerManager::~RemoteSampleBufferDisplayLayerManager() = default;
+
+void RemoteSampleBufferDisplayLayerManager::close()
 {
     m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName());
     m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName());
-}
-
-void RemoteSampleBufferDisplayLayerManager::close()
-{
     dispatchToThread([this, protectedThis = makeRef(*this)] {
         callOnMainThread([layers = WTFMove(m_layers)] { });
     });

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h (272904 => 272905)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -49,7 +49,12 @@
 class RemoteSampleBufferDisplayLayerManager final : public IPC::Connection::ThreadMessageReceiverRefCounted {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    static Ref<RemoteSampleBufferDisplayLayerManager> create(GPUConnectionToWebProcess& connection) { return adoptRef(*new RemoteSampleBufferDisplayLayerManager(connection)); }
+    static Ref<RemoteSampleBufferDisplayLayerManager> create(GPUConnectionToWebProcess& connection)
+    {
+        auto instance = adoptRef(*new RemoteSampleBufferDisplayLayerManager(connection));
+        instance->startListeningForIPC();
+        return instance;
+    }
     ~RemoteSampleBufferDisplayLayerManager();
 
     void close();
@@ -56,6 +61,7 @@
 
 private:
     explicit RemoteSampleBufferDisplayLayerManager(GPUConnectionToWebProcess&);
+    void startListeningForIPC();
 
     // IPC::Connection::ThreadMessageReceiver
     void dispatchToThread(Function<void()>&&) final;

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (272904 => 272905)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -93,6 +93,10 @@
 #if !RELEASE_LOG_DISABLED
     rtc::LogMessage::SetLogOutput(WebKit2LogWebRTC.state == WTFLogChannelState::On ? rtc::LS_INFO : rtc::LS_WARNING, doReleaseLogging);
 #endif
+}
+
+void NetworkRTCProvider::startListeningForIPC()
+{
     m_connection->connection().addThreadMessageReceiver(Messages::NetworkRTCProvider::messageReceiverName(), this);
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h (272904 => 272905)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -62,7 +62,12 @@
 
 class NetworkRTCProvider : public rtc::MessageHandler, public IPC::Connection::ThreadMessageReceiverRefCounted {
 public:
-    static Ref<NetworkRTCProvider> create(NetworkConnectionToWebProcess& connection) { return adoptRef(*new NetworkRTCProvider(connection)); }
+    static Ref<NetworkRTCProvider> create(NetworkConnectionToWebProcess& connection)
+    {
+        auto instance = adoptRef(*new NetworkRTCProvider(connection));
+        instance->startListeningForIPC();
+        return instance;
+    }
     ~NetworkRTCProvider();
 
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
@@ -99,6 +104,7 @@
 
 private:
     explicit NetworkRTCProvider(NetworkConnectionToWebProcess&);
+    void startListeningForIPC();
 
     void createUDPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, uint16_t, uint16_t);
     void createClientTCPSocket(WebCore::LibWebRTCSocketIdentifier, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, String&& userAgent, int);

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


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -166,9 +166,13 @@
 LibWebRTCCodecs::LibWebRTCCodecs()
     : m_queue(WorkQueue::create("LibWebRTCCodecs", WorkQueue::Type::Serial, WorkQueue::QOS::UserInteractive))
 {
+}
+
+void LibWebRTCCodecs::startListeningForIPC()
+{
+    ASSERT(!m_connection);
     auto& gpuConnection = WebProcess::singleton().ensureGPUProcessConnection();
     gpuConnection.addClient(*this);
-
     m_connection = makeRef(gpuConnection.connection());
     m_connection->addThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName(), this);
 }
@@ -175,8 +179,7 @@
 
 LibWebRTCCodecs::~LibWebRTCCodecs()
 {
-    if (m_connection)
-        m_connection->removeThreadMessageReceiver(Messages::LibWebRTCCodecsProxy::messageReceiverName());
+    ASSERT_NOT_REACHED();
 }
 
 void LibWebRTCCodecs::setCallbacks(bool useGPUProcess)
@@ -461,30 +464,28 @@
 
 void LibWebRTCCodecs::gpuProcessConnectionDidClose(GPUProcessConnection&)
 {
-    LockHolder holder(m_connectionLock);
-
-    if (m_connection)
-        m_connection->removeThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName());
-
     auto& gpuConnection = WebProcess::singleton().ensureGPUProcessConnection();
     gpuConnection.addClient(*this);
-    gpuConnection.connection().addThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName(), this);
+    {
+        auto lock = holdLock(m_connectionLock);
+        m_connection->removeThreadMessageReceiver(Messages::LibWebRTCCodecsProxy::messageReceiverName());
+        m_connection = makeRef(gpuConnection.connection());
+        m_connection->addThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName(), this);
+    }
 
-    dispatchToThread([this, connection = makeRef(gpuConnection.connection())] {
+    dispatchToThread([this]() {
         // Lock everything so that we can update encoder/decoder connection.
         LockHolder holder(m_connectionLock);
-
-        m_connection = connection.ptr();
         // Recreate encoders and initialize them, recreate decoders.
         for (auto& encoder : m_encoders.values()) {
-            connection->send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoder->identifier, formatNameFromWebRTCCodecType(encoder->codecType), encoder->parameters, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() }, 0);
+            m_connection->send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoder->identifier, formatNameFromWebRTCCodecType(encoder->codecType), encoder->parameters, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() }, 0);
             if (encoder->initializationData)
-                connection->send(Messages::LibWebRTCCodecsProxy::InitializeEncoder { encoder->identifier, encoder->initializationData->width, encoder->initializationData->height, encoder->initializationData->startBitRate, encoder->initializationData->maxBitRate, encoder->initializationData->minBitRate, encoder->initializationData->maxFrameRate }, 0);
-            encoder->connection = connection.ptr();
+                m_connection->send(Messages::LibWebRTCCodecsProxy::InitializeEncoder { encoder->identifier, encoder->initializationData->width, encoder->initializationData->height, encoder->initializationData->startBitRate, encoder->initializationData->maxBitRate, encoder->initializationData->minBitRate, encoder->initializationData->maxFrameRate }, 0);
+            encoder->connection = m_connection.get();
         }
         for (auto& decoder : m_decoders.values()) {
-            createRemoteDecoder(*decoder, connection.get());
-            decoder->connection = connection.ptr();
+            createRemoteDecoder(*decoder, *m_connection);
+            decoder->connection = m_connection.get();
         }
     });
 }

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


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -62,7 +62,12 @@
 class LibWebRTCCodecs : public IPC::Connection::ThreadMessageReceiverRefCounted, public GPUProcessConnection::Client {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    LibWebRTCCodecs();
+    static std::unique_ptr<LibWebRTCCodecs> create()
+    {
+        auto instance = std::unique_ptr<LibWebRTCCodecs>(new LibWebRTCCodecs);
+        instance->startListeningForIPC();
+        return instance;
+    }
     ~LibWebRTCCodecs();
 
     static void setCallbacks(bool useGPUProcess);
@@ -110,7 +115,7 @@
     int32_t encodeFrame(Encoder&, const webrtc::VideoFrame&, bool shouldEncodeAsKeyFrame);
     void registerEncodeFrameCallback(Encoder&, void* encodedImageCallback);
     void setEncodeRates(Encoder&, uint32_t bitRate, uint32_t frameRate);
-    
+
     CVPixelBufferPoolRef pixelBufferPool(size_t width, size_t height, OSType);
 
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
@@ -119,6 +124,9 @@
     bool supportVP9VTB() const { return m_supportVP9VTB; }
 
 private:
+    LibWebRTCCodecs();
+    void startListeningForIPC();
+
     void failedDecoding(RTCDecoderIdentifier);
     void completedDecoding(RTCDecoderIdentifier, uint32_t timeStamp, WebCore::RemoteVideoSample&&);
     void completedEncoding(RTCEncoderIdentifier, IPC::DataReference&&, const webrtc::WebKitEncodedFrameInfo&);

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.cpp (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -37,7 +37,7 @@
 
 LibWebRTCNetwork::~LibWebRTCNetwork()
 {
-    setConnection(nullptr);
+    ASSERT_NOT_REACHED();
 }
 
 void LibWebRTCNetwork::setAsActive()

Modified: trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -38,7 +38,6 @@
 class LibWebRTCNetwork : public IPC::Connection::ThreadMessageReceiverRefCounted {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    LibWebRTCNetwork() = default;
     ~LibWebRTCNetwork();
 
     IPC::Connection* connection() { return m_connection.get(); }

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -1193,7 +1193,7 @@
 LibWebRTCCodecs& WebProcess::libWebRTCCodecs()
 {
     if (!m_libWebRTCCodecs)
-        m_libWebRTCCodecs = makeUnique<LibWebRTCCodecs>();
+        m_libWebRTCCodecs = LibWebRTCCodecs::create();
     return *m_libWebRTCCodecs;
 }
 #endif

Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -46,6 +46,11 @@
 
 RemoteCaptureSampleManager::~RemoteCaptureSampleManager()
 {
+    ASSERT(!m_connection);
+}
+
+void RemoteCaptureSampleManager::stopListeningForIPC()
+{
     if (m_isRegisteredToParentProcessConnection)
         WebProcess::singleton().parentProcessConnection()->removeThreadMessageReceiver(Messages::RemoteCaptureSampleManager::messageReceiverName());
     setConnection(nullptr);

Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h	2021-02-16 16:10:54 UTC (rev 272905)
@@ -50,6 +50,7 @@
 public:
     RemoteCaptureSampleManager();
     ~RemoteCaptureSampleManager();
+    void stopListeningForIPC();
 
     void addSource(Ref<RemoteRealtimeAudioSource>&&);
     void addSource(Ref<RemoteRealtimeVideoSource>&&);

Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (272904 => 272905)


--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2021-02-16 15:18:49 UTC (rev 272904)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2021-02-16 16:10:54 UTC (rev 272905)
@@ -60,6 +60,7 @@
     RealtimeMediaSourceCenter::singleton().unsetDisplayCaptureFactory(m_displayFactory);
     RealtimeMediaSourceCenter::singleton().unsetVideoCaptureFactory(m_videoFactory);
     m_process.removeMessageReceiver(Messages::UserMediaCaptureManager::messageReceiverName());
+    m_remoteCaptureSampleManager.stopListeningForIPC();
 }
 
 const char* UserMediaCaptureManager::supplementName()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to