From 6ab4331f8137e949ab57f014f96ff3918a315044 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 25 Dec 2010 18:02:16 -0800 Subject: avoid errno side-effects in kgio_wait_*able Retrieving the file descriptor may have side-effects on certain Ruby implementations (e.g. Rubinius), so ensure our errno is preserved before calling rb_io_wait_*able(). --- ext/kgio/wait.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ext/kgio/wait.c b/ext/kgio/wait.c index abc10a3..c6ed610 100644 --- a/ext/kgio/wait.c +++ b/ext/kgio/wait.c @@ -21,8 +21,10 @@ static ID id_wait_rd, id_wait_wr; */ static VALUE kgio_wait_readable(VALUE self) { + int fd = my_fileno(self); + errno = EAGAIN; - if (!rb_io_wait_readable(my_fileno(self))) + if (!rb_io_wait_readable(fd)) rb_sys_fail("kgio_wait_readable"); return self; @@ -39,8 +41,10 @@ static VALUE kgio_wait_readable(VALUE self) */ static VALUE kgio_wait_writable(VALUE self) { + int fd = my_fileno(self); + errno = EAGAIN; - if (!rb_io_wait_writable(my_fileno(self))) + if (!rb_io_wait_writable(fd)) rb_sys_fail("kgio_wait_writable"); return self; -- cgit v1.2.3-24-ge0c7