Avoid playback on dead channels in voicemail

For years we've been generating spurious messages like:

  [WARNING] switch_ivr_play_say.c:348 Macro [voicemail_ack]: 'saved' did not match any patterns

This would happen when the caller hangs up during the playback of
certain prompts in the voicemail system where we weren't checking the
return value of vm_macro_get().  Looking closely at the log, it's
clear we were calling down into switch_ivr_phrase_macro() long after
the channel was gone.

The message above is also misleading -- switch_ivr_phrase_macro()
would have been able to find that pattern just fine, but it never
actually looked because the channel was gone.  We'll clean up that
message in a follow on commit.
This commit is contained in:
Travis Cross 2014-04-09 04:36:52 +00:00
parent f754057c2a
commit 1e273e514d
1 changed files with 3 additions and 0 deletions

View File

@ -1279,6 +1279,7 @@ static switch_status_t create_file(switch_core_session_t *session, vm_profile_t
goto end;
} else {
(void) vm_macro_get(session, VM_RECORD_FILE_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout);
if (!switch_channel_ready(channel)) goto end;
}
if (!strcmp(input, profile->listen_file_key)) {
@ -3673,6 +3674,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p
switch_snprintf(key_buf, sizeof(key_buf), "%s:%s", profile->urgent_key, profile->terminator_key);
if (!skip_record_urgent_check) {
(void) vm_macro_get(session, VM_RECORD_URGENT_CHECK_MACRO, key_buf, input, sizeof(input), 1, "", &term, profile->digit_timeout);
if (!switch_channel_ready(channel)) goto deliver;
if (*profile->urgent_key == *input) {
read_flags = URGENT_FLAG_STRING;
(void) switch_ivr_phrase_macro(session, VM_ACK_MACRO, "marked-urgent", NULL, NULL);
@ -3682,6 +3684,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p
}
}
deliver:
if (x_user) {
switch_channel_get_variables(channel, &vars);
status = deliver_vm(profile, x_user, domain_name, file_path, (uint32_t)message_len, read_flags, vars,