diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h index 8e9c6c7be9..275dc1e174 100644 --- a/include/asterisk/stasis.h +++ b/include/asterisk/stasis.h @@ -930,7 +930,8 @@ struct stasis_topic *stasis_topic_pool_get_topic(struct stasis_topic_pool *pool, * \brief Delete a topic from the topic pool * * \param pool Pool from which to delete the topic - * \param topic_name Name of the topic to delete + * \param topic_name Name of the topic to delete in the form of + * / or just * * \since 13.24 * \since 15.6 diff --git a/main/stasis.c b/main/stasis.c index 9d7c11fe54..67ed9a60b0 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -1855,7 +1855,22 @@ struct stasis_topic_pool *stasis_topic_pool_create(struct stasis_topic *pooled_t void stasis_topic_pool_delete_topic(struct stasis_topic_pool *pool, const char *topic_name) { - ao2_find(pool->pool_container, topic_name, OBJ_SEARCH_KEY | OBJ_NODATA | OBJ_UNLINK); + /* + * The topic_name passed in could be a fully-qualified name like / + * or just . If it's fully qualified, we need to skip past + * name and search only on . + */ + const char *pool_topic_name = stasis_topic_name(pool->pool_topic); + int pool_topic_name_len = strlen(pool_topic_name); + const char *search_topic_name; + + if (strncmp(pool_topic_name, topic_name, pool_topic_name_len) == 0) { + search_topic_name = topic_name + pool_topic_name_len + 1; + } else { + search_topic_name = topic_name; + } + + ao2_find(pool->pool_container, search_topic_name, OBJ_SEARCH_KEY | OBJ_NODATA | OBJ_UNLINK); } struct stasis_topic *stasis_topic_pool_get_topic(struct stasis_topic_pool *pool, const char *topic_name)