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()