summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkkm <kkm@smartaction.com>2017-01-17 18:46:43 -0800
committerkkm <kkm@smartaction.com>2017-01-26 19:04:30 -0800
commit555e8cd2ba3d6e24ce678e7ebc0fb9a8895ead65 (patch)
tree495fdc6a76a3448a1632b9a3a6f865876c0cd5a6
parent3410000948f406a2e4bba33842345c40eb9bee20 (diff)
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
-rw-r--r--main/utils.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/main/utils.c b/main/utils.c
index 253df8d03..de7ff8f90 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;