summaryrefslogtreecommitdiff
path: root/main/endpoints.c
diff options
context:
space:
mode:
authorGeorge Joseph <george.joseph@fairview5.com>2016-01-05 10:06:32 -0700
committerGeorge Joseph <george.joseph@fairview5.com>2016-01-05 12:29:31 -0600
commitd228b62fd437e02c0638684c1f44c92e5f1e3948 (patch)
treed1a4408b6242f0614e2c5fe6c7257e9648381cdf /main/endpoints.c
parente13719bff1c4a723edf08252da17fef04b6f88cf (diff)
stasis_cache_pattern: Backport to 13
Somehow stasis_cache_pattern got out of sync between 13 and master and it was causing duplicate channel message issues in 13 when related to a specific endpoint. I.E. from statsd, 'endpoints.PJSIP.1174.channels 0|g' was being emitted twice. Backporting stasis_cache_pattern from master to 13 solved the issue and running the unit and testsuite tests confirmed that no new ones were created. ASTERISK-25317 #close Change-Id: Ia8707462f62d15eed14541c37f332a7bbbceb548
Diffstat (limited to 'main/endpoints.c')
-rw-r--r--main/endpoints.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/main/endpoints.c b/main/endpoints.c
index 8f3ae366e..80e7f87fd 100644
--- a/main/endpoints.c
+++ b/main/endpoints.c
@@ -74,6 +74,8 @@ struct ast_endpoint {
struct stasis_message_router *router;
/*! ast_str_container of channels associated with this endpoint */
struct ao2_container *channel_ids;
+ /*! Forwarding subscription from an endpoint to its tech endpoint */
+ struct stasis_forward *tech_forward;
};
static int endpoint_hash(const void *obj, int flags)
@@ -303,7 +305,7 @@ static struct ast_endpoint *endpoint_internal_create(const char *tech, const cha
if (!ast_strlen_zero(resource)) {
- endpoint->topics = stasis_cp_single_create_only(ast_endpoint_cache_all(),
+ endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
endpoint->id);
if (!endpoint->topics) {
return NULL;
@@ -322,14 +324,13 @@ static struct ast_endpoint *endpoint_internal_create(const char *tech, const cha
return NULL;
}
- if (stasis_cp_single_forward(endpoint->topics, tech_endpoint->topics)) {
- return NULL;
- }
+ endpoint->tech_forward = stasis_forward_all(stasis_cp_single_topic(endpoint->topics),
+ stasis_cp_single_topic(tech_endpoint->topics));
endpoint_publish_snapshot(endpoint);
ao2_link(endpoints, endpoint);
} else {
- endpoint->topics = stasis_cp_single_create(ast_endpoint_cache_all(),
+ endpoint->topics = stasis_cp_sink_create(ast_endpoint_cache_all(),
endpoint->id);
if (!endpoint->topics) {
return NULL;
@@ -382,6 +383,7 @@ void ast_endpoint_shutdown(struct ast_endpoint *endpoint)
}
ao2_unlink(endpoints, endpoint);
+ endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward);
clear_msg = create_endpoint_snapshot_message(endpoint);
if (clear_msg) {