changeset 8835:299e30db1ee9 HEAD

If log write() fails because of EINTR, try again 2 more times.
author Timo Sirainen <tss@iki.fi>
date Wed, 18 Mar 2009 13:47:58 -0400
parents 5284f45c249a
children dc6880dcbbba
files src/lib/failures.c
diffstat 1 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/failures.c	Sun Mar 15 20:06:45 2009 -0400
+++ b/src/lib/failures.c	Wed Mar 18 13:47:58 2009 -0400
@@ -82,6 +82,7 @@
 	struct ioloop *ioloop;
 	struct io *io;
 	ssize_t ret;
+	unsigned int eintr_count = 0;
 
 	while ((ret = write(fd, data, len)) != (ssize_t)len) {
 		if (ret > 0) {
@@ -95,6 +96,11 @@
 			errno = ENOSPC;
 			return -1;
 		}
+		if (errno == EINTR && ++eintr_count < 3) {
+			/* we don't want to die because of this.
+			   try again a couple of times. */
+			continue;
+		}
 		if (errno != EAGAIN)
 			return -1;