summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2013-01-25 15:18:51 -0500
committerColin Walters <walters@verbum.org>2013-01-25 15:18:51 -0500
commit980fb78af5953423042bf9b426caeb72ac2b73a5 (patch)
tree9a9046e61cfa15af9aa6b80ee089f6945425a81e
parent3ca90a9a5644573be3a84c689a437598fb4406cd (diff)
downloadlibgsystem-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.c10
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;
}