diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c index 5371946993..f6ba9af848 100644 --- a/libs/freetdm/src/ftdm_io.c +++ b/libs/freetdm/src/ftdm_io.c @@ -414,9 +414,7 @@ static ftdm_status_t ftdm_span_destroy(ftdm_span_t *span) ftdm_mutex_lock(span->mutex); /* stop the signaling */ - if (span->stop) { - status = span->stop(span); - } + ftdm_span_stop(span); /* destroy the channels */ ftdm_clear_flag(span, FTDM_SPAN_CONFIGURED); @@ -514,12 +512,12 @@ static void ftdm_span_add(ftdm_span_t *span) FT_DECLARE(ftdm_status_t) ftdm_span_stop(ftdm_span_t *span) { + ftdm_status_t status = FTDM_FAIL; if (span->stop) { - span->stop(span); - return FTDM_SUCCESS; + status = span->stop(span); + span->stop = NULL; } - - return FTDM_FAIL; + return status; } FT_DECLARE(ftdm_status_t) ftdm_span_create(const char *iotype, const char *name, ftdm_span_t **span) diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h index 495e3cdc40..4cc9fd244e 100644 --- a/libs/freetdm/src/include/freetdm.h +++ b/libs/freetdm/src/include/freetdm.h @@ -1125,6 +1125,9 @@ FT_DECLARE(ftdm_status_t) ftdm_span_start(ftdm_span_t *span); /*! * \brief Stop the span signaling (must call ftdm_span_start first) + * \note certain signalings (boost signaling) does not support granular span start/stop + * so it is recommended to always configure all spans and then starting them all and finally + * stop them all (or call ftdm_global_destroy which takes care of stopping and destroying the spans at once). * * \param span The span to stop *