mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-24 06:53:41 +00:00
pjsip_configuration: On delete, remove the persistent version of an endpoint
When an endpoint is deleted (such as through an API), the persistent endpoint currently continues to lurk around. While this isn't harmful from a memory consumption perspective - as all persistent endpoints are reclaimed on shutdown - it does cause Stasis endpoint related operations to continue to believe that the endpoint may or may not exist. This patch causes the persistent endpoint related to a PJSIP endpoint to be destroyed if the PJSIP endpoint is deleted. Change-Id: I85ac707b4d5e6aad882ac275b0c2e2154affa5bb
This commit is contained in:
@@ -253,6 +253,17 @@ static const struct ast_sorcery_observer state_contact_status_observer = {
|
||||
.updated = persistent_endpoint_contact_status_observer,
|
||||
};
|
||||
|
||||
static void endpoint_deleted_observer(const void *object)
|
||||
{
|
||||
const struct ast_sip_endpoint *endpoint = object;
|
||||
|
||||
ao2_find(persistent_endpoints, ast_endpoint_get_resource(endpoint->persistent), OBJ_SEARCH_KEY | OBJ_UNLINK | OBJ_NODATA);
|
||||
}
|
||||
|
||||
static const struct ast_sorcery_observer endpoint_observers = {
|
||||
.deleted = endpoint_deleted_observer,
|
||||
};
|
||||
|
||||
static int dtmf_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
|
||||
{
|
||||
struct ast_sip_endpoint *endpoint = obj;
|
||||
@@ -1955,6 +1966,7 @@ int ast_res_pjsip_initialize_configuration(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
ast_sorcery_observer_add(sip_sorcery, "endpoint", &endpoint_observers);
|
||||
ast_sorcery_observer_add(sip_sorcery, "contact", &state_contact_observer);
|
||||
ast_sorcery_observer_add(sip_sorcery, CONTACT_STATUS, &state_contact_status_observer);
|
||||
|
||||
|
Reference in New Issue
Block a user