diff options
-rw-r--r-- | main/endpoints.c | 3 | ||||
-rw-r--r-- | tests/test_stasis_endpoints.c | 23 |
2 files changed, 18 insertions, 8 deletions
diff --git a/main/endpoints.c b/main/endpoints.c index 985f6e634..07687eecc 100644 --- a/main/endpoints.c +++ b/main/endpoints.c @@ -194,8 +194,6 @@ static void endpoint_dtor(void *obj) ao2_cleanup(endpoint->router); endpoint->router = NULL; - endpoint->tech_forward = stasis_forward_cancel(endpoint->tech_forward); - stasis_cp_single_unsubscribe(endpoint->topics); endpoint->topics = NULL; @@ -368,6 +366,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) { diff --git a/tests/test_stasis_endpoints.c b/tests/test_stasis_endpoints.c index 85d4afd17..7ac52917a 100644 --- a/tests/test_stasis_endpoints.c +++ b/tests/test_stasis_endpoints.c @@ -168,7 +168,7 @@ AST_TEST_DEFINE(cache_clear) cache_update, __func__, STASIS_SINK_DEFAULT_WAIT); ast_test_validate(test, 0 <= message_index); - /* First message should be a cache creation entry for our endpont */ + /* First message should be a cache creation entry for our endpoint */ msg = sink->messages[message_index]; type = stasis_message_type(msg); ast_test_validate(test, stasis_cache_update_type() == type); @@ -182,7 +182,10 @@ AST_TEST_DEFINE(cache_clear) ast_endpoint_shutdown(uut); uut = NULL; - message_index = stasis_message_sink_wait_for(sink, message_index + 1, + + /* Note: there's a few messages between the creation and the clear. + * Wait for all of them... */ + message_index = stasis_message_sink_wait_for(sink, message_index + 4, cache_update, __func__, STASIS_SINK_DEFAULT_WAIT); ast_test_validate(test, 0 <= message_index); /* Now we should have a cache removal entry */ @@ -252,20 +255,28 @@ AST_TEST_DEFINE(channel_messages) ast_hangup(chan); chan = NULL; - actual_count = stasis_message_sink_wait_for_count(sink, 4, + actual_count = stasis_message_sink_wait_for_count(sink, 6, STASIS_SINK_DEFAULT_WAIT); - ast_test_validate(test, 4 == actual_count); + ast_test_validate(test, 6 == actual_count); msg = sink->messages[1]; type = stasis_message_type(msg); + ast_test_validate(test, stasis_cache_update_type() == type); + + msg = sink->messages[2]; + type = stasis_message_type(msg); ast_test_validate(test, ast_channel_snapshot_type() == type); + msg = sink->messages[3]; + type = stasis_message_type(msg); + ast_test_validate(test, stasis_cache_update_type() == type); + /* The ordering of the cache clear and endpoint snapshot are * unspecified */ - msg = sink->messages[2]; + msg = sink->messages[4]; if (stasis_message_type(msg) == stasis_cache_clear_type()) { /* Okay; the next message should be the endpoint snapshot */ - msg = sink->messages[3]; + msg = sink->messages[5]; } type = stasis_message_type(msg); |