diff options
author | Colin Walters <walters@verbum.org> | 2013-01-25 15:18:51 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2013-01-25 15:18:51 -0500 |
commit | 980fb78af5953423042bf9b426caeb72ac2b73a5 (patch) | |
tree | 9a9046e61cfa15af9aa6b80ee089f6945425a81e | |
parent | 3ca90a9a5644573be3a84c689a437598fb4406cd (diff) | |
download | libgsystem-980fb78af5953423042bf9b426caeb72ac2b73a5.tar.gz |
fileutils: Don't loop for EINTR on close()
See https://bugzilla.gnome.org/show_bug.cgi?id=682819
-rw-r--r-- | gsystem-file-utils.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gsystem-file-utils.c b/gsystem-file-utils.c index 140d53a..07d35c1 100644 --- a/gsystem-file-utils.c +++ b/gsystem-file-utils.c @@ -36,9 +36,13 @@ static int close_nointr (int fd) { int res; - do - res = close (fd); - while (G_UNLIKELY (res != 0 && errno == EINTR)); + /* Note this is NOT actually a retry loop. + * See: https://bugzilla.gnome.org/show_bug.cgi?id=682819 + */ + res = close (fd); + /* Just ignore EINTR...on Linux, retrying is wrong. */ + if (res == EINTR) + res = 0; return res; } |