dovecot-1.1: If log write() fails because of EINTR, try again 2 ...

dovecot at dovecot.org dovecot at dovecot.org
Wed Mar 18 19:48:50 EET 2009


details:   http://hg.dovecot.org/dovecot-1.1/rev/12230cb6931b
changeset: 8206:12230cb6931b
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Mar 18 13:47:58 2009 -0400
description:
If log write() fails because of EINTR, try again 2 more times.

diffstat:

1 file changed, 6 insertions(+)
src/lib/failures.c |    6 ++++++

diffs (23 lines):

diff -r c6c50a99141f -r 12230cb6931b src/lib/failures.c
--- 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 @@ static int log_fd_write(int fd, const un
 	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) {
@@ -94,6 +95,11 @@ static int log_fd_write(int fd, const un
 			/* out of disk space? */
 			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;


More information about the dovecot-cvs mailing list