From 1be430ff61e8d365abe6b6f053a0e759bae17273 Mon Sep 17 00:00:00 2001 From: Alex Rodionov Date: Tue, 28 May 2024 11:59:12 -0700 Subject: [PATCH] [rb] Don't crash when ChildProcess is already killed Fixes #14032 --- rb/lib/selenium/webdriver/common/child_process.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rb/lib/selenium/webdriver/common/child_process.rb b/rb/lib/selenium/webdriver/common/child_process.rb index bb0d0e0f8242a..c63b8fa3b7c02 100644 --- a/rb/lib/selenium/webdriver/common/child_process.rb +++ b/rb/lib/selenium/webdriver/common/child_process.rb @@ -84,7 +84,7 @@ def exited? return false unless @pid WebDriver.logger.debug("Checking if #{@pid} is exited:", id: :process) - _, @status = Process.waitpid2(@pid, Process::WNOHANG | Process::WUNTRACED) if @status.nil? + _, @status = waitpid2(@pid, Process::WNOHANG | Process::WUNTRACED) if @status.nil? return false if @status.nil? exit_code = @status.exitstatus || @status.termsig @@ -105,7 +105,7 @@ def poll_for_exit(timeout) def wait return if exited? - _, @status = Process.waitpid2(@pid) + _, @status = waitpid2(@pid) end private @@ -119,6 +119,12 @@ def kill(pid) rescue Errno::ECHILD, Errno::ESRCH # already dead end + + def waitpid2(pid, flags = 0) + Process.waitpid2(pid, flags) + rescue Errno::ECHILD + # already dead + end end # ChildProcess end # WebDriver end # Selenium