diff --git a/lib/capybara/driver/webkit/browser.rb b/lib/capybara/driver/webkit/browser.rb index d2625aad..de603ef7 100644 --- a/lib/capybara/driver/webkit/browser.rb +++ b/lib/capybara/driver/webkit/browser.rb @@ -118,7 +118,7 @@ def discover_server_port(read_pipe) end def forward_stdout(pipe) - while !pipe.eof? + while pipe_readable?(pipe) line = pipe.readline if @stdout @stdout.write(line) @@ -128,6 +128,20 @@ def forward_stdout(pipe) rescue EOFError end + if !defined?(RUBY_ENGINE) || (RUBY_ENGINE == "ruby" && RUBY_VERSION <= "1.8") + # please note the use of IO::select() here, as it is used specifically to + # preserve correct signal handling behavior in ruby 1.8. + # https://github.com/thibaudgg/rb-fsevent/commit/d1a868bf8dc72dbca102bedbadff76c7e6c2dc21 + # https://github.com/thibaudgg/rb-fsevent/blob/1ca42b987596f350ee7b19d8f8210b7b6ae8766b/ext/fsevent/fsevent_watch.c#L171 + def pipe_readable?(pipe) + IO.select([pipe]) + end + else + def pipe_readable?(pipe) + !pipe.eof? + end + end + def connect Capybara.timeout(5) do attempt_connect diff --git a/src/main.cpp b/src/main.cpp index 94629041..f009d644 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,18 @@ #include "Server.h" #include #include +#ifdef Q_OS_UNIX + #include +#endif int main(int argc, char **argv) { +#ifdef Q_OS_UNIX + if (setpgid(0, 0) < 0) { + std::cerr << "Unable to set new process group." << std::endl; + return 1; + } +#endif + QApplication app(argc, argv); app.setApplicationName("capybara-webkit"); app.setOrganizationName("thoughtbot, inc");