From: Richard Mudgett Date: Thu, 6 Apr 2017 23:30:11 +0000 (-0500) Subject: sorcery.c: Speed up ast_sorcery_retrieve_by_id() X-Git-Tag: 13.16.0-rc1~50^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19b82a864415f57c72fa939f0909622761d3b358;p=thirdparty%2Fasterisk.git sorcery.c: Speed up ast_sorcery_retrieve_by_id() Return early if ast_sorcery_retrieve_by_id() is not passed an id to find. Also eliminated the RAII_VAR() usage in the function. Change-Id: I871dbe162a301b5ced8b4393cec27180c7c6b218 --- diff --git a/main/sorcery.c b/main/sorcery.c index f96e06ecea..713b038e64 100644 --- a/main/sorcery.c +++ b/main/sorcery.c @@ -1858,12 +1858,17 @@ static int sorcery_cache_create(void *obj, void *arg, int flags) void *ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id) { - RAII_VAR(struct ast_sorcery_object_type *, object_type, ao2_find(sorcery->types, type, OBJ_KEY), ao2_cleanup); + struct ast_sorcery_object_type *object_type; void *object = NULL; int i; unsigned int cached = 0; - if (!object_type || ast_strlen_zero(id)) { + if (ast_strlen_zero(id)) { + return NULL; + } + + object_type = ao2_find(sorcery->types, type, OBJ_SEARCH_KEY); + if (!object_type) { return NULL; } @@ -1891,6 +1896,7 @@ void *ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char * } AST_VECTOR_RW_UNLOCK(&object_type->wizards); + ao2_ref(object_type, -1); return object; }