]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: only ack indications when the channel is nonblocking
authorMoises Silva <moy@sangoma.com>
Fri, 7 Jan 2011 19:15:24 +0000 (14:15 -0500)
committerMoises Silva <moy@sangoma.com>
Fri, 7 Jan 2011 19:15:24 +0000 (14:15 -0500)
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftdm_state.c

index fb153c80623ebb018fe09c7fb315918395f6f849..cbaff7be54e9f8f076bf9c4b4d6437f9a38f418b 100644 (file)
@@ -2032,6 +2032,11 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_unhold(const char *file, const char
 FT_DECLARE(void) ftdm_ack_indication(ftdm_channel_t *fchan, ftdm_channel_indication_t indication, ftdm_status_t status)
 {
        ftdm_sigmsg_t msg;
+       
+       if (!ftdm_test_flag(fchan, FTDM_CHANNEL_IND_ACK_PENDING)) {
+               return;
+       }
+
        ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Acknowledging indication %s in state %s (rc = %d)\n", 
                        ftdm_channel_indication2str(indication), ftdm_channel_state2str(fchan->state), status);
        ftdm_clear_flag(fchan, FTDM_CHANNEL_IND_ACK_PENDING);
@@ -2255,7 +2260,9 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_indicate(const char *file, const ch
        }
 
        ftdmchan->indication = indication;
-       ftdm_set_flag(ftdmchan, FTDM_CHANNEL_IND_ACK_PENDING);
+       if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_NONBLOCK)) {
+               ftdm_set_flag(ftdmchan, FTDM_CHANNEL_IND_ACK_PENDING);
+       }
 
        if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OUTBOUND)) {
                ftdm_log_chan(ftdmchan, FTDM_LOG_WARNING, "Cannot indicate %s in outgoing channel in state %s\n",
index f6c2c2320cbd852119270f8403866850bc303536..61cd003942a963be18a53806284b4af6d7c2c7b5 100644 (file)
@@ -79,13 +79,10 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_complete_state(const char *file, const c
                ftdm_set_flag(fchan, FTDM_CHANNEL_MEDIA);       
        }
 
-       /* if there is a pending ack for an indication
-        * MAINTENANCE WARNING: we're assuming an indication performed 
-        * via state change will involve a single state change
-        */
-       if (ftdm_test_flag(fchan, FTDM_CHANNEL_IND_ACK_PENDING)) {
-               ftdm_ack_indication(fchan, fchan->indication, FTDM_SUCCESS);
-       }
+       /* MAINTENANCE WARNING
+        * we're assuming an indication performed 
+        * via state change will involve a single state change */
+       ftdm_ack_indication(fchan, fchan->indication, FTDM_SUCCESS);
 
        hindex = (fchan->hindex == 0) ? (ftdm_array_len(fchan->history) - 1) : (fchan->hindex - 1);