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: AS47066 71.19.144.0/20 X-Spam-Status: No, score=-1.9 required=3.0 tests=AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: normalperson@yhbt.net Received: from zedshaw2.xen.prgmr.com (zedshaw2.xen.prgmr.com [71.19.156.177]) by dcvr.yhbt.net (Postfix) with ESMTP id 578921F6D7 for ; Tue, 30 Apr 2013 02:40:17 +0000 (UTC) Received: from zedshaw2.xen.prgmr.com (unknown [IPv6:::1]) by zedshaw2.xen.prgmr.com (Postfix) with ESMTP id C86EE73DFC for ; Tue, 30 Apr 2013 02:42:14 +0000 (UTC) MIME-Version: 1.0 Date: Tue, 30 Apr 2013 02:39:37 +0000 From: Eric Wong List-Archive: List-Help: List-Id: List-Post: List-Subscribe: List-Unsubscribe: Message-Id: <1367289582-31293-13-git-send-email-normalperson@yhbt.net> Precedence: list References: <1367289582-31293-1-git-send-email-normalperson@yhbt.net> Sender: sleepy.penguin@librelist.org Subject: [sleepy.penguin] [PATCH 12/17] kqueue/io: fix MRI 1.8 support code for event retrieval To: sleepy.penguin@librelist.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit First off, the timeout is not handled properly when timing out, resulting in an infinite loop. Secondly, arguments were not passed to the yielded block correctly. Finally, the return value of kevent was not returned correctly to the caller. --- lib/sleepy_penguin/kqueue/io.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/sleepy_penguin/kqueue/io.rb b/lib/sleepy_penguin/kqueue/io.rb index 1e5809d..15502d4 100644 --- a/lib/sleepy_penguin/kqueue/io.rb +++ b/lib/sleepy_penguin/kqueue/io.rb @@ -15,11 +15,12 @@ def kevent(changelist = nil, nevents = nil, timeout = nil) expire_at = timeout ? Time.now + timeout : nil begin IO.select([self], nil, nil, timeout) - n = __kevent(changelist, nevents, 0) do |a,b,c,d,e,f| - yield a, b, c, d, e + n = __kevent(changelist, nevents, 0) do |*args| + yield(*args) end - end while n == 0 && + end while n == 0 && timeout != 0 && (expire_at == nil || timeout = __update_timeout(expire_at)) + n else # nevents should be zero or nil here __kevent(changelist, nevents, 0) -- 1.8.2.1.367.gc875ca7