From cacbe32534f5dde792b4c1593da33f786dcc71c6 Mon Sep 17 00:00:00 2001 From: Corey Farrell <git@cfware.com> Date: Mon, 1 Oct 2018 23:12:14 -0400 Subject: [PATCH] core: Disable astobj2 locking for some common objects. * ACO options * Indications * Module loader ref_debug object * Media index info and variants * xmldoc items These allocation locations were identified using reflocks.py on the master branch. Change-Id: Ie999b9941760be3d1946cdb6e30cb85fd97504d8 --- main/config_options.c | 7 +++++-- main/indications.c | 4 +++- main/loader.c | 2 +- main/media_index.c | 7 +++++-- main/xmldoc.c | 4 +++- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/main/config_options.c b/main/config_options.c index 41c8b222c9..2d5e09c8d0 100644 --- a/main/config_options.c +++ b/main/config_options.c @@ -222,7 +222,8 @@ int aco_option_register_deprecated(struct aco_info *info, const char *name, stru return -1; } - if (!(opt = ao2_alloc(sizeof(*opt), config_option_destroy))) { + opt = ao2_alloc_options(sizeof(*opt), config_option_destroy, AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!opt) { return -1; } @@ -313,7 +314,9 @@ int __aco_option_register(struct aco_info *info, const char *name, enum aco_matc return -1; } - if (!(opt = ao2_alloc(sizeof(*opt) + argc * sizeof(opt->args[0]), config_option_destroy))) { + opt = ao2_alloc_options(sizeof(*opt) + argc * sizeof(opt->args[0]), + config_option_destroy, AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!opt) { return -1; } diff --git a/main/indications.c b/main/indications.c index 6a7414dcc4..77755a9b2f 100644 --- a/main/indications.c +++ b/main/indications.c @@ -588,7 +588,9 @@ static int ast_register_indication(struct ast_tone_zone *zone, const char *indic } AST_LIST_TRAVERSE_SAFE_END; - if (!(ts = ao2_alloc(sizeof(*ts), ast_tone_zone_sound_destructor))) { + ts = ao2_alloc_options(sizeof(*ts), ast_tone_zone_sound_destructor, + AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!ts) { return -1; } diff --git a/main/loader.c b/main/loader.c index eb345b5eb5..98fc2fb136 100644 --- a/main/loader.c +++ b/main/loader.c @@ -554,7 +554,7 @@ void ast_module_register(const struct ast_module_info *info) mod->info = info; if (ast_opt_ref_debug) { - mod->ref_debug = ao2_t_alloc(0, NULL, info->name); + mod->ref_debug = ao2_t_alloc_options(0, NULL, AO2_ALLOC_OPT_LOCK_NOLOCK, info->name); } AST_LIST_HEAD_INIT(&mod->users); AST_VECTOR_INIT(&mod->requires, 0); diff --git a/main/media_index.c b/main/media_index.c index 72bc1ccbed..bfaa58003c 100644 --- a/main/media_index.c +++ b/main/media_index.c @@ -64,7 +64,8 @@ static struct media_variant *media_variant_alloc(const char *variant_str) size_t str_sz = strlen(variant_str) + 1; struct media_variant *variant; - variant = ao2_alloc(sizeof(*variant) + str_sz, media_variant_destroy); + variant = ao2_alloc_options(sizeof(*variant) + str_sz, media_variant_destroy, + AO2_ALLOC_OPT_LOCK_NOLOCK); if (!variant) { return NULL; } @@ -110,8 +111,10 @@ static void media_info_destroy(void *obj) static struct media_info *media_info_alloc(const char *name) { size_t name_sz = strlen(name) + 1; - struct media_info *info = ao2_alloc(sizeof(*info) + name_sz, media_info_destroy); + struct media_info *info; + info = ao2_alloc_options(sizeof(*info) + name_sz, media_info_destroy, + AO2_ALLOC_OPT_LOCK_NOLOCK); if (!info) { return NULL; } diff --git a/main/xmldoc.c b/main/xmldoc.c index b4649ac774..43ae074d06 100644 --- a/main/xmldoc.c +++ b/main/xmldoc.c @@ -2290,7 +2290,9 @@ static struct ast_xml_doc_item *ast_xml_doc_item_alloc(const char *name, const c { struct ast_xml_doc_item *item; - if (!(item = ao2_alloc(sizeof(*item), ast_xml_doc_item_destructor))) { + item = ao2_alloc_options(sizeof(*item), ast_xml_doc_item_destructor, + AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!item) { ast_log(AST_LOG_ERROR, "Failed to allocate memory for ast_xml_doc_item instance\n"); return NULL; } -- GitLab