[Asterisk-code-review] sorcery.c: Speed up ast sorcery retrieve by id() (asterisk[13])

Richard Mudgett asteriskteam at digium.com
Mon Apr 10 13:11:26 CDT 2017


Richard Mudgett has uploaded a new change for review. ( https://gerrit.asterisk.org/5434 )

Change subject: sorcery.c: Speed up ast_sorcery_retrieve_by_id()
......................................................................

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
---
M main/sorcery.c
1 file changed, 8 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/34/5434/1

diff --git a/main/sorcery.c b/main/sorcery.c
index f96e06e..713b038 100644
--- a/main/sorcery.c
+++ b/main/sorcery.c
@@ -1858,12 +1858,17 @@
 
 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 @@
 	}
 	AST_VECTOR_RW_UNLOCK(&object_type->wizards);
 
+	ao2_ref(object_type, -1);
 	return object;
 }
 

-- 
To view, visit https://gerrit.asterisk.org/5434
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I871dbe162a301b5ced8b4393cec27180c7c6b218
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>



More information about the asterisk-code-review mailing list