Title: [273029] trunk/Source/WebKit

Diff

Modified: trunk/Source/WebKit/ChangeLog (273028 => 273029)


--- trunk/Source/WebKit/ChangeLog	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/ChangeLog	2021-02-17 21:51:07 UTC (rev 273029)
@@ -1,3 +1,18 @@
+2021-02-17  Truitt Savell  <tsav...@apple.com>
+
+        Unreviewed, reverting r272905.
+
+        caused
+        TestWebKitAPI.WebKit2.CrashGPUProcessWhileCapturingAndCalling
+        to timeout
+
+        Reverted changeset:
+
+        "ThreadMessageReceiverRefCounted subclasses are accessed in
+        non-thread-safe way"
+        https://bugs.webkit.org/show_bug.cgi?id=221891
+        https://commits.webkit.org/r272905
+
 2021-02-17  Chris Dumez  <cdu...@apple.com>
 
         Unreviewed attempt to fix GTK build after r273023.

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp (273028 => 273029)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -41,20 +41,18 @@
     : m_connectionToWebProcess(connectionToWebProcess)
     , m_queue(connectionToWebProcess.gpuProcess().audioMediaStreamTrackRendererQueue())
 {
+    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName(), this);
+    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName(), this);
 }
 
-void RemoteAudioMediaStreamTrackRendererManager::startListeningForIPC()
+RemoteAudioMediaStreamTrackRendererManager::~RemoteAudioMediaStreamTrackRendererManager()
 {
-    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName(), this);
-    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName(), this);
+    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName());
+    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName());
 }
 
-RemoteAudioMediaStreamTrackRendererManager::~RemoteAudioMediaStreamTrackRendererManager() = default;
-
 void RemoteAudioMediaStreamTrackRendererManager::close()
 {
-    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName());
-    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName());
     dispatchToThread([this, protectedThis = makeRef(*this)] {
         m_renderers.clear();
     });

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h (273028 => 273029)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.h	2021-02-17 21:51:07 UTC (rev 273029)
@@ -45,12 +45,7 @@
 class RemoteAudioMediaStreamTrackRendererManager final : public IPC::Connection::ThreadMessageReceiverRefCounted {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    static Ref<RemoteAudioMediaStreamTrackRendererManager> create(GPUConnectionToWebProcess& process)
-    {
-        auto instance = adoptRef(*new RemoteAudioMediaStreamTrackRendererManager(process));
-        instance->startListeningForIPC();
-        return instance;
-    }
+    static Ref<RemoteAudioMediaStreamTrackRendererManager> create(GPUConnectionToWebProcess& process) { return adoptRef(*new RemoteAudioMediaStreamTrackRendererManager(process)); }
     ~RemoteAudioMediaStreamTrackRendererManager();
 
     void didReceiveRendererMessage(IPC::Connection&, IPC::Decoder&);
@@ -62,7 +57,6 @@
 
 private:
     explicit RemoteAudioMediaStreamTrackRendererManager(GPUConnectionToWebProcess&);
-    void startListeningForIPC();
 
     // IPC::Connection::ThreadMessageReceiver
     void dispatchToThread(Function<void()>&&) final;

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp (273028 => 273029)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -43,20 +43,18 @@
     , m_connection(gpuConnectionToWebProcess.connection())
     , m_queue(gpuConnectionToWebProcess.gpuProcess().videoMediaStreamTrackRendererQueue())
 {
+    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName(), this);
+    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName(), this);
 }
 
-void RemoteSampleBufferDisplayLayerManager::startListeningForIPC()
+RemoteSampleBufferDisplayLayerManager::~RemoteSampleBufferDisplayLayerManager()
 {
-    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName(), this);
-    m_connectionToWebProcess.connection().addThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName(), this);
+    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName());
+    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName());
 }
 
-RemoteSampleBufferDisplayLayerManager::~RemoteSampleBufferDisplayLayerManager() = default;
-
 void RemoteSampleBufferDisplayLayerManager::close()
 {
-    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayer::messageReceiverName());
-    m_connectionToWebProcess.connection().removeThreadMessageReceiver(Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName());
     dispatchToThread([this, protectedThis = makeRef(*this)] {
         callOnMainThread([layers = WTFMove(m_layers)] { });
     });

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.h (273028 => 273029)


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

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (273028 => 273029)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -93,10 +93,6 @@
 #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 (273028 => 273029)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-02-17 21:51:07 UTC (rev 273029)
@@ -62,12 +62,7 @@
 
 class NetworkRTCProvider : public rtc::MessageHandler, public IPC::Connection::ThreadMessageReceiverRefCounted {
 public:
-    static Ref<NetworkRTCProvider> create(NetworkConnectionToWebProcess& connection)
-    {
-        auto instance = adoptRef(*new NetworkRTCProvider(connection));
-        instance->startListeningForIPC();
-        return instance;
-    }
+    static Ref<NetworkRTCProvider> create(NetworkConnectionToWebProcess& connection) { return adoptRef(*new NetworkRTCProvider(connection)); }
     ~NetworkRTCProvider();
 
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
@@ -104,7 +99,6 @@
 
 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 (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -166,13 +166,9 @@
 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);
 }
@@ -179,7 +175,8 @@
 
 LibWebRTCCodecs::~LibWebRTCCodecs()
 {
-    ASSERT_NOT_REACHED();
+    if (m_connection)
+        m_connection->removeThreadMessageReceiver(Messages::LibWebRTCCodecsProxy::messageReceiverName());
 }
 
 void LibWebRTCCodecs::setCallbacks(bool useGPUProcess)
@@ -464,28 +461,30 @@
 
 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);
-    {
-        auto lock = holdLock(m_connectionLock);
-        m_connection->removeThreadMessageReceiver(Messages::LibWebRTCCodecsProxy::messageReceiverName());
-        m_connection = makeRef(gpuConnection.connection());
-        m_connection->addThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName(), this);
-    }
+    gpuConnection.connection().addThreadMessageReceiver(Messages::LibWebRTCCodecs::messageReceiverName(), this);
 
-    dispatchToThread([this]() {
+    dispatchToThread([this, connection = makeRef(gpuConnection.connection())] {
         // 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()) {
-            m_connection->send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoder->identifier, formatNameFromWebRTCCodecType(encoder->codecType), encoder->parameters, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() }, 0);
+            connection->send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoder->identifier, formatNameFromWebRTCCodecType(encoder->codecType), encoder->parameters, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() }, 0);
             if (encoder->initializationData)
-                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();
+                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();
         }
         for (auto& decoder : m_decoders.values()) {
-            createRemoteDecoder(*decoder, *m_connection);
-            decoder->connection = m_connection.get();
+            createRemoteDecoder(*decoder, connection.get());
+            decoder->connection = connection.ptr();
         }
     });
 }

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


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h	2021-02-17 21:51:07 UTC (rev 273029)
@@ -62,12 +62,7 @@
 class LibWebRTCCodecs : public IPC::Connection::ThreadMessageReceiverRefCounted, public GPUProcessConnection::Client {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    static std::unique_ptr<LibWebRTCCodecs> create()
-    {
-        auto instance = std::unique_ptr<LibWebRTCCodecs>(new LibWebRTCCodecs);
-        instance->startListeningForIPC();
-        return instance;
-    }
+    LibWebRTCCodecs();
     ~LibWebRTCCodecs();
 
     static void setCallbacks(bool useGPUProcess);
@@ -115,7 +110,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;
@@ -124,9 +119,6 @@
     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 (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -37,7 +37,7 @@
 
 LibWebRTCNetwork::~LibWebRTCNetwork()
 {
-    ASSERT_NOT_REACHED();
+    setConnection(nullptr);
 }
 
 void LibWebRTCNetwork::setAsActive()

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


--- trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/Network/webrtc/LibWebRTCNetwork.h	2021-02-17 21:51:07 UTC (rev 273029)
@@ -38,6 +38,7 @@
 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 (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -1193,7 +1193,7 @@
 LibWebRTCCodecs& WebProcess::libWebRTCCodecs()
 {
     if (!m_libWebRTCCodecs)
-        m_libWebRTCCodecs = LibWebRTCCodecs::create();
+        m_libWebRTCCodecs = makeUnique<LibWebRTCCodecs>();
     return *m_libWebRTCCodecs;
 }
 #endif

Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -46,11 +46,6 @@
 
 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 (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h	2021-02-17 21:51:07 UTC (rev 273029)
@@ -50,7 +50,6 @@
 public:
     RemoteCaptureSampleManager();
     ~RemoteCaptureSampleManager();
-    void stopListeningForIPC();
 
     void addSource(Ref<RemoteRealtimeAudioSource>&&);
     void addSource(Ref<RemoteRealtimeVideoSource>&&);

Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (273028 => 273029)


--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2021-02-17 21:47:53 UTC (rev 273028)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2021-02-17 21:51:07 UTC (rev 273029)
@@ -60,7 +60,6 @@
     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