Author: kharwell Date: Fri Jan 16 18:35:59 2015 New Revision: 430735 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=430735 Log: REVERTING res_pjsip: make it unloadable
Due to the original patch causing memory corruptions the patch is being removed until the problem can be resolved. ........ Merged revisions 430734 from http://svn.asterisk.org/svn/asterisk/branches/13 Modified: trunk/ (props changed) trunk/main/stasis_message_router.c trunk/res/res_pjsip.c trunk/res/res_pjsip/config_auth.c trunk/res/res_pjsip/config_transport.c trunk/res/res_pjsip/include/res_pjsip_private.h trunk/res/res_pjsip/location.c trunk/res/res_pjsip/pjsip_configuration.c trunk/res/res_pjsip/pjsip_distributor.c trunk/res/res_pjsip/pjsip_global_headers.c trunk/res/res_pjsip/pjsip_options.c trunk/res/res_pjsip/pjsip_outbound_auth.c Propchange: trunk/ ------------------------------------------------------------------------------ Binary property 'branch-13-merged' - no diff available. Modified: trunk/main/stasis_message_router.c URL: http://svnview.digium.com/svn/asterisk/trunk/main/stasis_message_router.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/main/stasis_message_router.c (original) +++ trunk/main/stasis_message_router.c Fri Jan 16 18:35:59 2015 @@ -255,7 +255,7 @@ return; } - router->subscription = stasis_unsubscribe(router->subscription); + stasis_unsubscribe(router->subscription); } void stasis_message_router_unsubscribe_and_join( Modified: trunk/res/res_pjsip.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip.c (original) +++ trunk/res/res_pjsip.c Fri Jan 16 18:35:59 2015 @@ -40,8 +40,6 @@ /*** MODULEINFO <depend>pjproject</depend> <depend>res_sorcery_config</depend> - <depend>res_sorcery_memory</depend> - <depend>res_sorcery_astdb</depend> <support_level>core</support_level> ***/ @@ -1813,7 +1811,7 @@ static struct ast_threadpool *sip_threadpool; -static int register_service_noref(void *data) +static int register_service(void *data) { pjsip_module **module = data; if (!ast_pjsip_endpoint) { @@ -1825,55 +1823,25 @@ return -1; } ast_debug(1, "Registered SIP service %.*s (%p)\n", (int) pj_strlen(&(*module)->name), pj_strbuf(&(*module)->name), *module); + ast_module_ref(ast_module_info->self); return 0; } -static int register_service(void *data) -{ - int res; - - if (!(res = register_service_noref(data))) { - ast_module_ref(ast_module_info->self); - } - - return res; -} - -int internal_sip_register_service(pjsip_module *module) -{ - return ast_sip_push_task_synchronous(NULL, register_service_noref, &module); -} - int ast_sip_register_service(pjsip_module *module) { return ast_sip_push_task_synchronous(NULL, register_service, &module); } -static int unregister_service_noref(void *data) +static int unregister_service(void *data) { pjsip_module **module = data; + ast_module_unref(ast_module_info->self); if (!ast_pjsip_endpoint) { return -1; } pjsip_endpt_unregister_module(ast_pjsip_endpoint, *module); ast_debug(1, "Unregistered SIP service %.*s\n", (int) pj_strlen(&(*module)->name), pj_strbuf(&(*module)->name)); return 0; -} - -static int unregister_service(void *data) -{ - int res; - - if (!(res = unregister_service_noref(data))) { - ast_module_unref(ast_module_info->self); - } - - return res; -} - -int internal_sip_unregister_service(pjsip_module *module) -{ - return ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module); } void ast_sip_unregister_service(pjsip_module *module) @@ -2022,38 +1990,26 @@ AST_RWLIST_HEAD_STATIC(endpoint_formatters, ast_sip_endpoint_formatter); -void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) +int ast_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) { SCOPED_LOCK(lock, &endpoint_formatters, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK); AST_RWLIST_INSERT_TAIL(&endpoint_formatters, obj, next); -} - -int ast_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) -{ - internal_sip_register_endpoint_formatter(obj); ast_module_ref(ast_module_info->self); return 0; } -int internal_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) +void ast_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) { struct ast_sip_endpoint_formatter *i; SCOPED_LOCK(lock, &endpoint_formatters, AST_RWLIST_WRLOCK, AST_RWLIST_UNLOCK); AST_RWLIST_TRAVERSE_SAFE_BEGIN(&endpoint_formatters, i, next) { if (i == obj) { AST_RWLIST_REMOVE_CURRENT(next); + ast_module_unref(ast_module_info->self); break; } } AST_RWLIST_TRAVERSE_SAFE_END; - return i == obj ? 0 : -1; -} - -void ast_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj) -{ - if (!internal_sip_unregister_endpoint_formatter(obj)) { - ast_module_unref(ast_module_info->self); - } } int ast_sip_format_endpoint_ami(struct ast_sip_endpoint *endpoint, @@ -3262,7 +3218,7 @@ return AST_MODULE_LOAD_DECLINE; } - if (internal_sip_register_service(&supplement_module)) { + if (ast_sip_register_service(&supplement_module)) { ast_log(LOG_ERROR, "Failed to initialize supplement hooks. Aborting load\n"); ast_sip_destroy_distributor(); ast_res_pjsip_destroy_configuration(); @@ -3277,9 +3233,9 @@ return AST_MODULE_LOAD_DECLINE; } - if (internal_sip_initialize_outbound_authentication()) { + if (ast_sip_initialize_outbound_authentication()) { ast_log(LOG_ERROR, "Failed to initialize outbound authentication. Aborting load\n"); - internal_sip_unregister_service(&supplement_module); + ast_sip_unregister_service(&supplement_module); ast_sip_destroy_distributor(); ast_res_pjsip_destroy_configuration(); ast_sip_destroy_global_headers(); @@ -3295,6 +3251,8 @@ ast_res_pjsip_init_options_handling(0); + ast_module_ref(ast_module_info->self); + return AST_MODULE_LOAD_SUCCESS; } @@ -3308,41 +3266,9 @@ return 0; } -static int unload_pjsip(void *data) -{ - if (memory_pool) { - pj_pool_release(memory_pool); - memory_pool = NULL; - } - if (ast_pjsip_endpoint) { - pjsip_endpt_destroy(ast_pjsip_endpoint); - ast_pjsip_endpoint = NULL; - } - pj_caching_pool_destroy(&caching_pool); - pj_shutdown(); - return 0; -} - static int unload_module(void) { - ast_res_pjsip_cleanup_options_handling(); - internal_sip_destroy_outbound_authentication(); - ast_sip_destroy_distributor(); - ast_res_pjsip_destroy_configuration(); - ast_sip_destroy_system(); - ast_sip_destroy_global_headers(); - internal_sip_unregister_service(&supplement_module); - if (monitor_thread) { - stop_monitor_thread(); - } - /* The thread this is called from cannot call PJSIP/PJLIB functions, - * so we have to push the work to the threadpool to handle - */ - ast_sip_push_task_synchronous(NULL, unload_pjsip, NULL); - - ast_threadpool_shutdown(sip_threadpool); - - ast_sip_destroy_cli(); + /* This will never get called as this module can't be unloaded */ return 0; } Modified: trunk/res/res_pjsip/config_auth.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/config_auth.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/config_auth.c (original) +++ trunk/res/res_pjsip/config_auth.c Fri Jan 16 18:35:59 2015 @@ -312,7 +312,7 @@ ast_sorcery_object_field_register_custom(sorcery, SIP_SORCERY_AUTH_TYPE, "auth_type", "userpass", auth_type_handler, auth_type_to_str, NULL, 0, 0); - internal_sip_register_endpoint_formatter(&endpoint_auth_formatter); + ast_sip_register_endpoint_formatter(&endpoint_auth_formatter); cli_formatter = ao2_alloc(sizeof(struct ast_sip_cli_formatter_entry), NULL); if (!cli_formatter) { @@ -337,7 +337,6 @@ { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(cli_formatter); - internal_sip_unregister_endpoint_formatter(&endpoint_auth_formatter); - - return 0; -} + + return 0; +} Modified: trunk/res/res_pjsip/config_transport.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/config_transport.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/config_transport.c (original) +++ trunk/res/res_pjsip/config_transport.c Fri Jan 16 18:35:59 2015 @@ -769,7 +769,7 @@ ast_sorcery_object_field_register(sorcery, "transport", "cos", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_transport, cos)); ast_sorcery_object_field_register(sorcery, "transport", "websocket_write_timeout", AST_DEFAULT_WEBSOCKET_WRITE_TIMEOUT_STR, OPT_INT_T, PARSE_IN_RANGE, FLDSET(struct ast_sip_transport, write_timeout), 1, INT_MAX); - internal_sip_register_endpoint_formatter(&endpoint_transport_formatter); + ast_sip_register_endpoint_formatter(&endpoint_transport_formatter); cli_formatter = ao2_alloc(sizeof(struct ast_sip_cli_formatter_entry), NULL); if (!cli_formatter) { @@ -795,7 +795,5 @@ ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(cli_formatter); - internal_sip_unregister_endpoint_formatter(&endpoint_transport_formatter); - - return 0; -} + return 0; +} Modified: trunk/res/res_pjsip/include/res_pjsip_private.h URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/include/res_pjsip_private.h?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/include/res_pjsip_private.h (original) +++ trunk/res/res_pjsip/include/res_pjsip_private.h Fri Jan 16 18:35:59 2015 @@ -57,15 +57,7 @@ * \retval 0 Success * \retval non-zero Failure */ -int internal_sip_initialize_outbound_authentication(void); - -/*! - * \brief Destroy outbound authentication support - * - * \retval 0 Success - * \retval non-zero Failure - */ -void internal_sip_destroy_outbound_authentication(void); +int ast_sip_initialize_outbound_authentication(void); /*! * \brief Initialize system configuration @@ -120,24 +112,4 @@ int ast_sip_initialize_cli(void); void ast_sip_destroy_cli(void); -/*! - * \internal \brief Used by res_pjsip.so to register a service without adding a self reference - */ -int internal_sip_register_service(pjsip_module *module); - -/*! - * \internal \brief Used by res_pjsip.so to unregister a service without removing a self reference - */ -int internal_sip_unregister_service(pjsip_module *module); - -/*! - * \internal \brief Used by res_pjsip.so to register an endpoint formatter without adding a self reference - */ -void internal_sip_register_endpoint_formatter(struct ast_sip_endpoint_formatter *obj); - -/*! - * \internal \brief Used by res_pjsip.so to unregister a endpoint formatter without removing a self reference - */ -int internal_sip_unregister_endpoint_formatter(struct ast_sip_endpoint_formatter *obj); - #endif /* RES_PJSIP_PRIVATE_H_ */ Modified: trunk/res/res_pjsip/location.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/location.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/location.c (original) +++ trunk/res/res_pjsip/location.c Fri Jan 16 18:35:59 2015 @@ -870,7 +870,7 @@ ast_sorcery_object_field_register(sorcery, "aor", "outbound_proxy", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_aor, outbound_proxy)); ast_sorcery_object_field_register(sorcery, "aor", "support_path", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_aor, support_path)); - internal_sip_register_endpoint_formatter(&endpoint_aor_formatter); + ast_sip_register_endpoint_formatter(&endpoint_aor_formatter); contact_formatter = ao2_alloc(sizeof(struct ast_sip_cli_formatter_entry), NULL); if (!contact_formatter) { @@ -911,8 +911,6 @@ ast_sip_unregister_cli_formatter(contact_formatter); ast_sip_unregister_cli_formatter(aor_formatter); - internal_sip_unregister_endpoint_formatter(&endpoint_aor_formatter); - - return 0; -} - + return 0; +} + Modified: trunk/res/res_pjsip/pjsip_configuration.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/pjsip_configuration.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/pjsip_configuration.c (original) +++ trunk/res/res_pjsip/pjsip_configuration.c Fri Jan 16 18:35:59 2015 @@ -1670,9 +1670,7 @@ return -1; } - if (ast_sorcery_internal_object_register(sip_sorcery, "nat_hook", sip_nat_hook_alloc, NULL, NULL)) { - ast_log(LOG_ERROR, "Failed to register nat_hook\n"); - } + ast_sorcery_internal_object_register(sip_sorcery, "nat_hook", sip_nat_hook_alloc, NULL, NULL); ast_sorcery_object_field_register(sip_sorcery, "endpoint", "type", "", OPT_NOOP_T, 0, 0); ast_sorcery_object_field_register(sip_sorcery, "endpoint", "context", "default", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, context)); @@ -1851,7 +1849,6 @@ ast_sip_unregister_cli_formatter(endpoint_formatter); ast_sip_unregister_cli_formatter(channel_formatter); ast_sorcery_unref(sip_sorcery); - ao2_cleanup(persistent_endpoints); } int ast_res_pjsip_reload_configuration(void) Modified: trunk/res/res_pjsip/pjsip_distributor.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/pjsip_distributor.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/pjsip_distributor.c (original) +++ trunk/res/res_pjsip/pjsip_distributor.c Fri Jan 16 18:35:59 2015 @@ -21,7 +21,6 @@ #include <pjsip.h> #include "asterisk/res_pjsip.h" -#include "include/res_pjsip_private.h" static int distribute(void *data); static pj_bool_t distributor(pjsip_rx_data *rdata); @@ -223,7 +222,7 @@ return artificial_auth; } -static struct ast_sip_endpoint *artificial_endpoint = NULL; +static struct ast_sip_endpoint *artificial_endpoint; static int create_artificial_endpoint(void) { @@ -237,7 +236,7 @@ * the proper size of the vector is returned. This value is * not actually used anywhere */ - AST_VECTOR_APPEND(&artificial_endpoint->inbound_auths, ast_strdup("artificial-auth")); + AST_VECTOR_APPEND(&artificial_endpoint->inbound_auths, "artificial-auth"); return 0; } @@ -374,13 +373,13 @@ return -1; } - if (internal_sip_register_service(&distributor_mod)) { - return -1; - } - if (internal_sip_register_service(&endpoint_mod)) { - return -1; - } - if (internal_sip_register_service(&auth_mod)) { + if (ast_sip_register_service(&distributor_mod)) { + return -1; + } + if (ast_sip_register_service(&endpoint_mod)) { + return -1; + } + if (ast_sip_register_service(&auth_mod)) { return -1; } @@ -389,9 +388,9 @@ void ast_sip_destroy_distributor(void) { - internal_sip_unregister_service(&distributor_mod); - internal_sip_unregister_service(&endpoint_mod); - internal_sip_unregister_service(&auth_mod); + ast_sip_unregister_service(&distributor_mod); + ast_sip_unregister_service(&endpoint_mod); + ast_sip_unregister_service(&auth_mod); ao2_cleanup(artificial_auth); ao2_cleanup(artificial_endpoint); Modified: trunk/res/res_pjsip/pjsip_global_headers.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/pjsip_global_headers.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/pjsip_global_headers.c (original) +++ trunk/res/res_pjsip/pjsip_global_headers.c Fri Jan 16 18:35:59 2015 @@ -23,7 +23,6 @@ #include "asterisk/res_pjsip.h" #include "asterisk/linkedlists.h" -#include "include/res_pjsip_private.h" static pj_status_t add_request_headers(pjsip_tx_data *tdata); static pj_status_t add_response_headers(pjsip_tx_data *tdata); @@ -152,7 +151,7 @@ AST_RWLIST_HEAD_INIT(&request_headers); AST_RWLIST_HEAD_INIT(&response_headers); - internal_sip_register_service(&global_header_mod); + ast_sip_register_service(&global_header_mod); } static void destroy_headers(struct header_list *headers) @@ -169,6 +168,4 @@ { destroy_headers(&request_headers); destroy_headers(&response_headers); - - internal_sip_unregister_service(&global_header_mod); } Modified: trunk/res/res_pjsip/pjsip_options.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/pjsip_options.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/pjsip_options.c (original) +++ trunk/res/res_pjsip/pjsip_options.c Fri Jan 16 18:35:59 2015 @@ -1123,7 +1123,7 @@ return -1; } - internal_sip_register_endpoint_formatter(&contact_status_formatter); + ast_sip_register_endpoint_formatter(&contact_status_formatter); ast_manager_register2("PJSIPQualify", EVENT_FLAG_SYSTEM | EVENT_FLAG_REPORTING, ami_sip_qualify, NULL, NULL, NULL); ast_cli_register_multiple(cli_options, ARRAY_LEN(cli_options)); @@ -1136,7 +1136,7 @@ { ast_cli_unregister_multiple(cli_options, ARRAY_LEN(cli_options)); ast_manager_unregister("PJSIPQualify"); - internal_sip_unregister_endpoint_formatter(&contact_status_formatter); + ast_sip_unregister_endpoint_formatter(&contact_status_formatter); pjsip_endpt_unregister_module(ast_sip_get_pjsip_endpoint(), &options_module); ao2_cleanup(sched_qualifies); Modified: trunk/res/res_pjsip/pjsip_outbound_auth.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip/pjsip_outbound_auth.c?view=diff&rev=430735&r1=430734&r2=430735 ============================================================================== --- trunk/res/res_pjsip/pjsip_outbound_auth.c (original) +++ trunk/res/res_pjsip/pjsip_outbound_auth.c Fri Jan 16 18:35:59 2015 @@ -91,11 +91,6 @@ return 0; } -int internal_sip_initialize_outbound_authentication(void) { - return internal_sip_register_service(&outbound_auth_mod); +int ast_sip_initialize_outbound_authentication(void) { + return ast_sip_register_service(&outbound_auth_mod); } - - -void internal_sip_destroy_outbound_authentication(void) { - internal_sip_unregister_service(&outbound_auth_mod); -} -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits