diff --git a/Source/WebKit/Platform/IPC/unix/ConnectionUnix.cpp b/Source/WebKit/Platform/IPC/unix/ConnectionUnix.cpp index 87969d7f027e1..43091cc588639 100644 --- a/Source/WebKit/Platform/IPC/unix/ConnectionUnix.cpp +++ b/Source/WebKit/Platform/IPC/unix/ConnectionUnix.cpp @@ -647,6 +647,11 @@ pid_t readPIDFromPeer(int socket) if (ret == -1) g_error("readPIDFromPeer: Failed to read pid from PID socket: %s", g_strerror(errno)); + if (ret == 0) { + // Peer died before sending PID (e.g. SIGTERM during container teardown). + return 0; + } + if (message.msg_controllen <= 0) g_error("readPIDFromPeer: Unexpected short read from PID socket"); diff --git a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp index 271987adce84e..0e44b67f2f04b 100644 --- a/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp +++ b/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp @@ -258,7 +258,13 @@ void ProcessLauncher::launchProcess() g_error("Failed to read pid from child process"); m_processID = IPC::readPIDFromPeer(g_socket_get_fd(pidSocket.get())); - RELEASE_ASSERT(m_processID); + if (!m_processID) { + m_socketMonitor.stop(); + close(m_pidServerSocket); + m_pidServerSocket = -1; + didFinishLaunchingProcess(0, IPC::Connection::Identifier { }); + return G_SOURCE_REMOVE; + } m_socketMonitor.stop();