From 922d197adfe5bb636f381ecae250744c3e8475cc Mon Sep 17 00:00:00 2001 From: "Hongli Lai (Phusion)" Date: Wed, 17 Aug 2011 17:41:36 +0200 Subject: [PATCH] Use Process.spawn to spawn webkit_server whenever possible. This allows one to close all unnecessary file descriptors in the child process so they don't conflict with whatever the app is expecting. It solves some problems with DRb. --- lib/capybara/driver/webkit/browser.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/capybara/driver/webkit/browser.rb b/lib/capybara/driver/webkit/browser.rb index f753100e..ccfaeda5 100644 --- a/lib/capybara/driver/webkit/browser.rb +++ b/lib/capybara/driver/webkit/browser.rb @@ -93,10 +93,18 @@ def fork_server server_path = File.expand_path("../../../../../bin/webkit_server", __FILE__) read_pipe, write_pipe = IO.pipe - @pid = fork do - $stdout.reopen write_pipe - read_pipe.close - exec(server_path) + if Process.respond_to?(:spawn) + @pid = Process.spawn(server_path, + :in => :in, + :out => write_pipe, + :err => :err, + :close_others => true) + else + @pid = fork do + $stdout.reopen write_pipe + read_pipe.close + exec(server_path) + end end at_exit { Process.kill("INT", @pid) }