diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-01-21 22:45:10 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-01-21 22:45:10 +0900 |
commit | 5798d35ff66e468ebf296c4069ede275d7fb0ec9 (patch) | |
tree | 1cf03b39f584f9a0cbd20fc9c48729cc597f3b89 | |
parent | 25f2005a638570cce832d218a451072057610f06 (diff) |
Also check EWOULDBLOCK as well as EAGAIN
-rwxr-xr-x | io.c | 13 |
1 files changed, 4 insertions, 9 deletions
@@ -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); } |