mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-24 13:12:03 +00:00
prevent race on execute_on_answer called from the B-leg of a call
This commit is contained in:
committed by
Brian West
parent
7e880ee33e
commit
751e0291ee
@@ -1841,6 +1841,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_execute_application_async(sw
|
||||
switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "execute-app-arg", arg);
|
||||
}
|
||||
|
||||
if (!switch_channel_test_flag(session->channel, CF_PROXY_MODE)) {
|
||||
switch_channel_set_flag(session->channel, CF_BLOCK_BROADCAST_UNTIL_MEDIA);
|
||||
}
|
||||
|
||||
switch_event_add_header_string(execute_event, SWITCH_STACK_BOTTOM, "event-lock", "true");
|
||||
switch_core_session_queue_private_event(session, &execute_event, SWITCH_FALSE);
|
||||
|
||||
@@ -1891,9 +1895,19 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_execute_application_get_flag
|
||||
switch_goto_status(SWITCH_STATUS_FALSE, done);
|
||||
}
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
|
||||
"Cannot execute app '%s' media required on an outbound channel that does not have media established\n", app);
|
||||
switch_goto_status(SWITCH_STATUS_FALSE, done);
|
||||
uint32_t ready = 0, sanity = 2000;
|
||||
|
||||
do {
|
||||
sanity--;
|
||||
ready = switch_channel_media_ready(session->channel);
|
||||
switch_cond_next();
|
||||
} while(!ready && sanity);
|
||||
|
||||
if (!ready) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
|
||||
"Cannot execute app '%s' media required on an outbound channel that does not have media established\n", app);
|
||||
switch_goto_status(SWITCH_STATUS_FALSE, done);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user