{
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));
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: