From: kkm Date: Wed, 18 Jan 2017 02:46:43 +0000 (-0800) Subject: ast_careful_fwrite to support EPIPE gracefully X-Git-Tag: 13.14.0-rc1~12^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=555e8cd2ba3d6e24ce678e7ebc0fb9a8895ead65;p=thirdparty%2Fasterisk.git ast_careful_fwrite to support EPIPE gracefully When a reading end of the network socket is closed by an AMI manager, the EPIPE is signaled when writing to our end, resulting in the spurious log error message ast_careful_fwrite: fwrite() returned error: Broken pipe Previously EPIPE was handled in ast_carefulwrite() a few lines above, but not in this function. ASTERISK-26753 Change-Id: I6a67335cd6526608bb9b78f796c626b1677664b8 --- diff --git a/main/utils.c b/main/utils.c index 253df8d039..de7ff8f902 100644 --- a/main/utils.c +++ b/main/utils.c @@ -1453,7 +1453,9 @@ int ast_careful_fwrite(FILE *f, int fd, const char *src, size_t len, int timeout if (ferror(f) && errno != EINTR && errno != EAGAIN) { /* fatal error from fwrite() */ - if (!feof(f)) { + if (errno == EPIPE) { + ast_debug(1, "fwrite() failed due to reading end being closed: EPIPE\n"); + } else if (!feof(f)) { /* Don't spam the logs if it was just that the connection is closed. */ ast_log(LOG_ERROR, "fwrite() returned error: %s\n", strerror(errno)); } @@ -1486,8 +1488,12 @@ int ast_careful_fwrite(FILE *f, int fd, const char *src, size_t len, int timeout continue; } if (errno && !feof(f)) { - /* Don't spam the logs if it was just that the connection is closed. */ - ast_log(LOG_ERROR, "fflush() returned error: %s\n", strerror(errno)); + if (errno == EPIPE) { + ast_debug(1, "fflush() failed due to reading end being closed: EPIPE\n"); + } else { + /* Don't spam the logs if it was just that the connection is closed. */ + ast_log(LOG_ERROR, "fflush() returned error: %s\n", strerror(errno)); + } } n = -1; break;