From 1bca90fcbe7d3581b9c568361267faf488141868 Mon Sep 17 00:00:00 2001 From: Matt Jordan Date: Thu, 19 Nov 2015 09:40:24 -0600 Subject: res/res_pjsip_outbound_registration: Apply configuration on object type load When Asterisk is configured to use a dynamic sorcery backend (such as res_sorcery_astdb) with 'registration' objects, it will fail to create the internal state objects associated with the registration objects on module load. This is due to nothing actually querying for the specific objects and calling their sorcery apply handler during module load. This patch fixes that by calling get_registrations in the sorcery observer's object_type_loaded handler. Doing this causes the sorcery backends to be asked for the current state of all registration objects, which causes the apply handler to be called and the internal run-time state to be created. ASTERISK-25575 #close Change-Id: Ie9306e797098c6d4da7bcf4a5434a15891508b23 --- res/res_pjsip_outbound_registration.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c index 7ff5f1619..7b125334a 100644 --- a/res/res_pjsip_outbound_registration.c +++ b/res/res_pjsip_outbound_registration.c @@ -1846,6 +1846,13 @@ static void registration_loaded_observer(const char *name, const struct ast_sorc return; } + /* + * Refresh the current configured registrations. We don't need to hold + * onto the objects, as the apply handler will cause their states to + * be created appropriately. + */ + ao2_cleanup(get_registrations()); + /* Now to purge dead registrations. */ ao2_callback(states, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, check_state, NULL); ao2_ref(states, -1); -- cgit v1.2.3