From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: mogilefs-client-public@bogomips.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 9717E1F814 for ; Wed, 4 Nov 2015 21:43:16 +0000 (UTC) From: Eric Wong To: mogilefs-client-public@bogomips.org Subject: [PATCH] socket/pure_ruby: fix Ruby 1.8 compatibility Date: Wed, 4 Nov 2015 21:43:16 +0000 Message-Id: <20151104214316.8841-1-e@80x24.org> List-Id: For non-kgio users, IO#wait_readable did not appear until Ruby 2.0. Additionally, optimistically perform reads before waiting because EOF handling behavior differs in current revisions of Ruby 2.3.0dev. --- lib/mogilefs/socket/pure_ruby.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mogilefs/socket/pure_ruby.rb b/lib/mogilefs/socket/pure_ruby.rb index 7530a40..e74bbef 100644 --- a/lib/mogilefs/socket/pure_ruby.rb +++ b/lib/mogilefs/socket/pure_ruby.rb @@ -23,15 +23,15 @@ class MogileFS::Socket < Socket sock end - def wait_writable(timeout) + def wait_writable(timeout = nil) IO.select(nil, [ self ], nil, timeout) end unless self.instance_methods.include?(:wait_writable) # Ruby <2.0.0 def timed_read(len, dst = "", timeout = 5) begin - wait_readable(timeout) or unreadable_socket!(timeout) return read_nonblock(len, dst) rescue Errno::EAGAIN + wait(timeout) or unreadable_socket!(timeout) rescue EOFError return end while true @@ -39,10 +39,10 @@ class MogileFS::Socket < Socket def timed_peek(len, dst, timeout = 5) begin - wait_readable(timeout) or unreadable_socket!(timeout) rc = recv_nonblock(len, Socket::MSG_PEEK) return rc.empty? ? nil : dst.replace(rc) rescue Errno::EAGAIN + wait(timeout) or unreadable_socket!(timeout) rescue EOFError dst.replace("") return -- EW