summaryrefslogtreecommitdiff
path: root/main/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/app.c')
-rw-r--r--main/app.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/main/app.c b/main/app.c
index a6c7514cd..64a4ae672 100644
--- a/main/app.c
+++ b/main/app.c
@@ -1782,18 +1782,20 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile,
ast_truncstream(others[x]);
ast_closestream(others[x]);
}
- }
-
- if (prepend && outmsg) {
+ } else if (prepend && outmsg) {
struct ast_filestream *realfiles[AST_MAX_FORMATS];
struct ast_frame *fr;
for (x = 0; x < fmtcnt; x++) {
snprintf(comment, sizeof(comment), "Opening the real file %s.%s\n", recordfile, sfmt[x]);
realfiles[x] = ast_readfile(recordfile, sfmt[x], comment, O_RDONLY, 0, 0);
- if (!others[x] || !realfiles[x]) {
+ if (!others[x]) {
break;
}
+ if (!realfiles[x]) {
+ ast_closestream(others[0]);
+ continue;
+ }
/*!\note Same logic as above. */
if (dspsilence) {
ast_stream_rewind(others[x], dspsilence - 200);
@@ -1810,7 +1812,15 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile,
ast_verb(4, "Recording Format: sfmts=%s, prependfile %s, recordfile %s\n", sfmt[x], prependfile, recordfile);
ast_filedelete(prependfile, sfmt[x]);
}
+ } else {
+ for (x = 0; x < fmtcnt; x++) {
+ if (!others[x]) {
+ break;
+ }
+ ast_closestream(others[x]);
+ }
}
+
if (rfmt && ast_set_read_format(chan, rfmt)) {
ast_log(LOG_WARNING, "Unable to restore format %s to channel '%s'\n", ast_format_get_name(rfmt), ast_channel_name(chan));
}