From: Timo Sirainen Date: Wed, 18 Mar 2009 17:47:58 +0000 (-0400) Subject: If log write() fails because of EINTR, try again 2 more times. X-Git-Tag: 1.2.beta3~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=712d5a264c79ed36b55dbe9d5f37c66bf484858f;p=thirdparty%2Fdovecot%2Fcore.git If log write() fails because of EINTR, try again 2 more times. --HG-- branch : HEAD --- diff --git a/src/lib/failures.c b/src/lib/failures.c index a4de26c795..776bbdfc95 100644 --- a/src/lib/failures.c +++ b/src/lib/failures.c @@ -82,6 +82,7 @@ static int log_fd_write(int fd, const unsigned char *data, unsigned int len) 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 @@ static int log_fd_write(int fd, const unsigned char *data, unsigned int len) 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;