From 22a81f6bb2856cf16c291440215cfa318d9e7de4 Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Fri, 18 Jul 2014 09:43:10 -0400 Subject: [PATCH] Make Connection#read non-blocking * Ensure that Connection#read will not block Timeout::timeout for JRuby users. --- lib/capybara/webkit/connection.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/capybara/webkit/connection.rb b/lib/capybara/webkit/connection.rb index 5f578bc..6852301 100644 --- a/lib/capybara/webkit/connection.rb +++ b/lib/capybara/webkit/connection.rb @@ -36,16 +36,23 @@ module Capybara::Webkit def gets response = "" - - while !response.match(/\n/) && Thread.new { IO.select([@socket]) }.join do - response += @socket.read_nonblock(1) + until response.match(/\n/) do + response += read(1) end - response end def read(length) - @socket.read(length) + response = "" + begin + while response.length < length do + response += @socket.read_nonblock(length - response.length) + end + rescue IO::WaitReadable + Thread.new { IO.select([@socket]) }.join + retry + end + response end private