From b7b5aea03d315388aef75367ebdf00c84b1e22dc Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 22 Sep 2009 15:36:53 +0000 Subject: [PATCH] try to rotate on failed write to cdr file git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14948 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c b/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c index c56b44f8f7..11cb43880b 100644 --- a/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c +++ b/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c @@ -129,6 +129,7 @@ static void write_cdr(const char *path, const char *log_line) { cdr_fd_t *fd = NULL; unsigned int bytes_in, bytes_out; + int loops = 0; if (!(fd = switch_core_hash_find(globals.fd_hash, path))) { fd = switch_core_alloc(globals.pool, sizeof(*fd)); @@ -155,11 +156,15 @@ static void write_cdr(const char *path, const char *log_line) do_rotate(fd); } - if ((bytes_in = write(fd->fd, log_line, bytes_out)) != bytes_out) { + while ((bytes_in = write(fd->fd, log_line, bytes_out)) != bytes_out && ++loops < 10) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Write error to file %s %d/%d\n", path, (int) bytes_in, (int) bytes_out); + do_rotate(fd); + switch_yield(250000); + } + + if (bytes_in > 0) { + fd->bytes += bytes_in; } - - fd->bytes += bytes_in; end: