aboutsummaryrefslogtreecommitdiffstats
path: root/main/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/app.c')
-rw-r--r--main/app.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/main/app.c b/main/app.c
index 68310d359..20064af14 100644
--- a/main/app.c
+++ b/main/app.c
@@ -743,8 +743,6 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile,
} else {
ast_frfree(f);
}
- if (end == start)
- end = time(NULL);
} else {
ast_log(LOG_WARNING, "Error creating writestream '%s', format '%s'\n", recordfile, sfmt[x]);
}
@@ -753,7 +751,17 @@ static int __ast_play_and_record(struct ast_channel *chan, const char *playfile,
if (silgen)
ast_channel_stop_silence_generator(chan, silgen);
}
- *duration = end - start;
+
+ /*!\note
+ * Instead of asking how much time passed (end - start), calculate the number
+ * of seconds of audio which actually went into the file. This fixes a
+ * problem where audio is stopped up on the network and never gets to us.
+ *
+ * Note that we still want to use the number of seconds passed for the max
+ * message, otherwise we could get a situation where this stream is never
+ * closed (which would create a resource leak).
+ */
+ *duration = ast_tellstream(others[0]) / 8000;
if (!prepend) {
for (x = 0; x < fmtcnt; x++) {