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
This commit is contained in:
UpBeta
2026-05-23 21:00:53 +00:00
parent def7c70710
commit 13de0495f2

View File

@@ -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 */