From 02234ae87db5fcca0168a140b5800618de65d3d9 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 11 Feb 2011 16:49:07 -0600 Subject: [PATCH] fix file leaks in mod_commandline_tts --- .../mod_tts_commandline/mod_tts_commandline.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c b/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c index 6b261f1d96..0f3bc41f14 100644 --- a/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c +++ b/src/mod/asr_tts/mod_tts_commandline/mod_tts_commandline.c @@ -120,6 +120,11 @@ static switch_status_t tts_commandline_speech_close(switch_speech_handle_t *sh, tts_commandline_t *info = (tts_commandline_t *) sh->private_info; assert(info != NULL); + if (switch_test_flag(info->fh, SWITCH_FILE_OPEN)) { + switch_core_file_close(info->fh); + unlink(info->file); + } + return SWITCH_STATUS_SUCCESS; } @@ -130,6 +135,11 @@ static switch_status_t tts_commandline_speech_feed_tts(switch_speech_handle_t *s assert(info != NULL); + if (switch_test_flag(info->fh, SWITCH_FILE_OPEN)) { + switch_core_file_close(info->fh); + unlink(info->file); + } + message = switch_core_strdup(sh->memory_pool, globals.command); tmp = switch_util_quote_shell_arg(text); @@ -152,7 +162,7 @@ static switch_status_t tts_commandline_speech_feed_tts(switch_speech_handle_t *s } if (switch_core_file_open(info->fh, info->file, 0, //number_of_channels, - 0, //samples_per_second, + info->rate, //samples_per_second, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to open file: %s\n", info->file); return SWITCH_STATUS_FALSE; @@ -171,11 +181,14 @@ static switch_status_t tts_commandline_speech_read_tts(switch_speech_handle_t *s assert(info != NULL); if (switch_core_file_read(info->fh, data, &my_datalen) != SWITCH_STATUS_SUCCESS) { - *datalen = my_datalen * 2; + switch_core_file_close(info->fh); + unlink(info->file); return SWITCH_STATUS_FALSE; } *datalen = my_datalen * 2; if (datalen == 0) { + switch_core_file_close(info->fh); + unlink(info->file); return SWITCH_STATUS_BREAK; } else { return SWITCH_STATUS_SUCCESS;