]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
be more strict about changing callstate based on clearing hold flag
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 24 Jun 2010 15:09:39 +0000 (10:09 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 24 Jun 2010 15:09:39 +0000 (10:09 -0500)
src/switch_channel.c

index df7601199ea6b65e2dcb49b64e40c82d9bf2b19f..7eb8bd0c74c1b6687e440999ac50006982c065c6 100644 (file)
@@ -1229,6 +1229,9 @@ SWITCH_DECLARE(void) switch_channel_set_flag_value(switch_channel_t *channel, sw
        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);
 
@@ -1236,11 +1239,6 @@ SWITCH_DECLARE(void) switch_channel_set_flag_value(switch_channel_t *channel, sw
                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)
@@ -1322,16 +1320,15 @@ SWITCH_DECLARE(void) switch_channel_clear_flag(switch_channel_t *channel, switch
        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);
-       }
 }