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 53BB81F790 for ; Thu, 26 Sep 2013 21:40:12 +0000 (UTC) Received: from zedshaw2.xen.prgmr.com (unknown [IPv6:::1]) by zedshaw2.xen.prgmr.com (Postfix) with ESMTP id 0AD5D7506B for ; Thu, 26 Sep 2013 21:50:55 +0000 (UTC) MIME-Version: 1.0 Date: Thu, 26 Sep 2013 21:39:59 +0000 From: Eric Wong List-Archive: List-Help: List-Id: List-Post: List-Subscribe: List-Unsubscribe: Message-Id: <1380231600-27298-2-git-send-email-normalperson@yhbt.net> Precedence: list References: <1380231600-27298-1-git-send-email-normalperson@yhbt.net> Sender: sleepy.penguin@librelist.org Subject: [sleepy.penguin] [PATCH 2/3] avoid RARRAY_PTR usage for Linux-only bits To: sleepy.penguin@librelist.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit RARRAY_PTR incurs extra overhead on the Ruby 2.1.0 and Rubinius GC implementations, so avoid it. None of these are believed to be performance-critical enough to benefit from RARRAY_PTR in older Rubies, either. --- ext/sleepy_penguin/inotify.c | 8 ++++---- ext/sleepy_penguin/signalfd.c | 6 +++--- ext/sleepy_penguin/util.c | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ext/sleepy_penguin/inotify.c b/ext/sleepy_penguin/inotify.c index 4e771a2..5771030 100644 --- a/ext/sleepy_penguin/inotify.c +++ b/ext/sleepy_penguin/inotify.c @@ -255,15 +255,15 @@ static VALUE take(int argc, VALUE *argv, VALUE self) static VALUE events(VALUE self) { long len = RARRAY_LEN(checks); - VALUE *ptr = RARRAY_PTR(checks); + long i; VALUE sym; VALUE rv = rb_ary_new(); uint32_t mask; uint32_t event_mask = NUM2UINT(rb_funcall(self, id_mask, 0)); - for (; (len -= 2) >= 0;) { - sym = *ptr++; - mask = NUM2UINT(*ptr++); + for (i = 0; i < len; ) { + sym = rb_ary_entry(checks, i++); + mask = NUM2UINT(rb_ary_entry(checks, i++)); if ((event_mask & mask) == mask) rb_ary_push(rv, sym); } diff --git a/ext/sleepy_penguin/signalfd.c b/ext/sleepy_penguin/signalfd.c index 511745c..ebd6c86 100644 --- a/ext/sleepy_penguin/signalfd.c +++ b/ext/sleepy_penguin/signalfd.c @@ -44,11 +44,11 @@ static void value2sigset(sigset_t *mask, VALUE set) switch (TYPE(set)) { case T_NIL: return; case T_ARRAY: { - VALUE *ptr = RARRAY_PTR(set); + long i; long len = RARRAY_LEN(set); - while (--len >= 0) - sigaddset(mask, sig2int(*ptr++)); + for (i = 0; i < len; i++) + sigaddset(mask, sig2int(rb_ary_entry(set, i))); } break; default: diff --git a/ext/sleepy_penguin/util.c b/ext/sleepy_penguin/util.c index 11a1b13..717a099 100644 --- a/ext/sleepy_penguin/util.c +++ b/ext/sleepy_penguin/util.c @@ -14,13 +14,13 @@ int rb_sp_get_flags(VALUE klass, VALUE flags, int default_flags) case T_SYMBOL: return NUM2INT(rb_const_get(klass_for(klass), SYM2ID(flags))); case T_ARRAY: { - VALUE *ptr = RARRAY_PTR(flags); + long i; long len = RARRAY_LEN(flags); int rv = 0; klass = klass_for(klass); - while (--len >= 0) { - VALUE tmp = *ptr++; + for (i = 0; i < len; i++) { + VALUE tmp = rb_ary_entry(flags, i); Check_Type(tmp, T_SYMBOL); tmp = rb_const_get(klass, SYM2ID(tmp)); @@ -42,13 +42,13 @@ unsigned rb_sp_get_uflags(VALUE klass, VALUE flags) case T_SYMBOL: return NUM2UINT(rb_const_get(klass_for(klass), SYM2ID(flags))); case T_ARRAY: { - VALUE *ptr = RARRAY_PTR(flags); + long i; long len = RARRAY_LEN(flags); unsigned rv = 0; klass = klass_for(klass); - while (--len >= 0) { - VALUE tmp = *ptr++; + for (i = 0; i < len; i++) { + VALUE tmp = rb_ary_entry(flags, i); Check_Type(tmp, T_SYMBOL); tmp = rb_const_get(klass, SYM2ID(tmp)); -- 1.8.4