diff --git a/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c b/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c index ebb14566d9..6cb42447b2 100644 --- a/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c +++ b/src/mod/event_handlers/mod_json_cdr/mod_json_cdr.c @@ -244,12 +244,15 @@ static switch_status_t my_on_reporting(switch_core_session_t *session) #else if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) > -1) { #endif - int wrote; - wrote = write(fd, json_text, (unsigned) strlen(json_text)); - close(fd); - fd = -1; - if(wrote < 0) { + switch_size_t json_len = strlen(json_text); + switch_ssize_t wrote = 0, x; + do { x = write(fd, json_text, json_len); + } while (!(x<0) && json_len > (wrote += x)); + close(fd); fd = -1; + if (x < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error writing [%s]\n",path); + if (0 > unlink(path)) + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error unlinking [%s]\n",path); } } else { char ebuf[512] = { 0 };