switch_assert(channel->flag_mutex);
switch_mutex_lock(channel->flag_mutex);
+ if (flag == CF_LEG_HOLDING && !channel->flags[flag] && channel->flags[CF_ANSWERED]) {
+ switch_channel_set_callstate(channel, CCS_HELD);
+ }
channel->flags[flag] = value;
switch_mutex_unlock(channel->flag_mutex);
switch_channel_set_variable(channel, "is_outbound", "true");
}
- if (flag == CF_LEG_HOLDING) {
- switch_channel_set_callstate(channel, CCS_HELD);
- }
-
-
}
SWITCH_DECLARE(void) switch_channel_set_flag_recursive(switch_channel_t *channel, switch_channel_flag_t flag)
switch_assert(channel->flag_mutex);
switch_mutex_lock(channel->flag_mutex);
+ if (flag == CF_LEG_HOLDING && channel->flags[flag] && channel->flags[CF_ANSWERED]) {
+ switch_channel_set_callstate(channel, CCS_ACTIVE);
+ }
channel->flags[flag] = 0;
switch_mutex_unlock(channel->flag_mutex);
if (flag == CF_OUTBOUND) {
switch_channel_set_variable(channel, "is_outbound", NULL);
}
-
- if (flag == CF_LEG_HOLDING) {
- switch_channel_set_callstate(channel, CCS_ACTIVE);
- }
}