From 5798d35ff66e468ebf296c4069ede275d7fb0ec9 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 21 Jan 2020 22:45:10 +0900 Subject: [PATCH] Also check EWOULDBLOCK as well as EAGAIN --- io.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/io.c b/io.c index 51d92a942ff591..201ec9bede62fc 100755 --- a/io.c +++ b/io.c @@ -316,7 +316,6 @@ rb_cloexec_open(const char *pathname, int flags, mode_t mode) static const int retry_max_count = 10000; int retry_count = 0; - int e; #ifdef O_CLOEXEC /* O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */ @@ -325,15 +324,11 @@ rb_cloexec_open(const char *pathname, int flags, mode_t mode) flags |= O_NOINHERIT; #endif - while (1) { - ret = open(pathname, flags, mode); - e = errno; - - if (ret != -1 || e != EAGAIN || retry_count >= retry_max_count) { - break; - } + while ((ret = open(pathname, flags, mode)) == -1) { + int e = errno; + if (e != EAGAIN && e != EWOULDBLOCK) break; + if (retry_count++ >= retry_max_count) break; - retry_count++; sleep(retry_interval); }