]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Added FTDM_SPAN_NON_STOPPABLE flag for signalling modules that do not support individ...
authorDavid Yat Sin <dyatsin@sangoma.com>
Mon, 10 Jan 2011 22:46:18 +0000 (17:46 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Mon, 10 Jan 2011 22:46:18 +0000 (17:46 -0500)
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
libs/freetdm/src/include/private/ftdm_types.h

index 430b58a31e08fa61181565b3c83745ea91d122f6..5e49fda52019dc3f21171183b89490f0ee2dce32 100644 (file)
@@ -634,6 +634,10 @@ static ftdm_status_t ftdm_span_destroy(ftdm_span_t *span)
        ftdm_mutex_lock(span->mutex);
 
        /* stop the signaling */
+
+       /* This is a forced stopped */
+       ftdm_clear_flag(span, FTDM_SPAN_NON_STOPPABLE);
+       
        ftdm_span_stop(span);
 
        /* destroy the channels */
@@ -739,6 +743,11 @@ FT_DECLARE(ftdm_status_t) ftdm_span_stop(ftdm_span_t *span)
        ftdm_status_t status =  FTDM_SUCCESS;
        
        ftdm_mutex_lock(span->mutex);
+       
+       if (ftdm_test_flag(span, FTDM_SPAN_NON_STOPPABLE)) {
+               status = FTDM_NOTIMPL;
+               goto done;
+       }
 
        if (!ftdm_test_flag(span, FTDM_SPAN_STARTED)) {
                status = FTDM_EINVAL;
index c13f584df8232d958de3eed48dfd52bb8473fd83..97650245a16edebd6547d26dca8033b72b17de14 100644 (file)
@@ -1094,6 +1094,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
        ftdm_set_flag(span, FTDM_SPAN_USE_SIGNALS_QUEUE);
        ftdm_set_flag(span, FTDM_SPAN_USE_PROCEED_STATE);
        ftdm_set_flag(span, FTDM_SPAN_USE_SKIP_STATES);
+       ftdm_set_flag(span, FTDM_SPAN_NON_STOPPABLE);
 
        if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
                span->trunk_type == FTDM_TRUNK_BRI) {
index d79835733ba854f17910ff02869518eb38d015f2..3bc986d7f67141bf88438dc8002e15603657b540 100644 (file)
@@ -186,6 +186,9 @@ typedef enum {
        /* If this flag is set, the signalling module supports jumping directly to state up, without
                going through PROGRESS/PROGRESS_MEDIA */
        FTDM_SPAN_USE_SKIP_STATES = (1 << 12),
+       /* If this flag is set, then this span cannot be stopped individually, it can only be stopped
+               on freetdm unload */
+       FTDM_SPAN_NON_STOPPABLE = (1 << 13),
 } ftdm_span_flag_t;
 
 /*! \brief Channel supported features */