Commit e6699a9298 for asterisk.org
commit e6699a92989b57b7de45c24dff9106df6d9fdb85
Author: UpBeta <1.51861782e+08+UpBeta@users.noreply.github.com>
Date: Sat May 23 21:00:53 2026 +0000
app_record: Fix hangup handling during beep playback
When a hangup occurs while app_record is playing the initial beep,
the application does not detect the hangup and continues running
until the maxduration timeout expires.
Replace the manual ast_streamfile() + ast_waitstream() sequence with
ast_stream_and_wait(), which properly detects hangup and returns
non-zero, allowing the application to exit immediately with
RECORD_STATUS set to HANGUP.
Resolves: #1950
diff --git a/apps/app_record.c b/apps/app_record.c
index 5dc362ca48..7004fd9f8b 100644
--- a/apps/app_record.c
+++ b/apps/app_record.c
@@ -457,15 +457,11 @@ static int record_exec(struct ast_channel *chan, const char *data)
}
if (!ast_test_flag(&flags, OPTION_QUIET)) {
- /* Some code to play a nice little beep to signify the start of the record operation */
- res = ast_streamfile(chan, "beep", ast_channel_language(chan));
- if (!res) {
- res = ast_waitstream(chan, "");
- } else {
- ast_log(LOG_WARNING, "ast_streamfile(beep) failed on %s\n", ast_channel_name(chan));
- res = 0;
+ /* Play a beep to signify the start of the record operation */
+ if (ast_stream_and_wait(chan, "beep", "")) {
+ status_response = "HANGUP";
+ goto out;
}
- ast_stopstream(chan);
}
/* The end of beep code. Now the recording starts */