[asterisk-commits] mjordan: branch mjordan/12-stasis-performance r414971 - /team/mjordan/12-stas...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sat May 31 14:33:04 CDT 2014


Author: mjordan
Date: Sat May 31 14:33:01 2014
New Revision: 414971

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=414971
Log:
stasis_cache: Mini-optimization - store hash result in cache entries

This knocks the call to ast_hashtab_hash_string down a few pegs

Modified:
    team/mjordan/12-stasis-performance/main/stasis_cache.c

Modified: team/mjordan/12-stasis-performance/main/stasis_cache.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/12-stasis-performance/main/stasis_cache.c?view=diff&rev=414971&r1=414970&r2=414971
==============================================================================
--- team/mjordan/12-stasis-performance/main/stasis_cache.c (original)
+++ team/mjordan/12-stasis-performance/main/stasis_cache.c Sat May 31 14:33:01 2014
@@ -129,7 +129,8 @@
 
 struct cache_entry_key {
 	struct stasis_message_type *type;
-	const char *id;
+	const char *id;	
+	unsigned int hash;
 };
 
 struct stasis_cache_entry {
@@ -166,6 +167,12 @@
 	AST_VECTOR_FREE(&entry->remote);
 }
 
+static void cache_entry_compute_hash(struct cache_entry_key *key)
+{
+	key->hash = ast_hashtab_hash_string(stasis_message_type_name(key->type));
+	key->hash += ast_hashtab_hash_string(key->id);
+}
+
 static struct stasis_cache_entry *cache_entry_create(struct stasis_message_type *type, const char *id, struct stasis_message *snapshot)
 {
 	struct stasis_cache_entry *entry;
@@ -187,6 +194,7 @@
 		return NULL;
 	}
 	entry->key.type = ao2_bump(type);
+	cache_entry_compute_hash(&entry->key);
 
 	is_remote = ast_eid_cmp(&ast_eid_default, stasis_message_eid(snapshot)) ? 1 : 0;
 	if (AST_VECTOR_INIT(&entry->remote, is_remote)) {
@@ -211,7 +219,6 @@
 {
 	const struct stasis_cache_entry *object;
 	const struct cache_entry_key *key;
-	int hash = 0;
 
 	switch (flags & OBJ_SEARCH_MASK) {
 	case OBJ_SEARCH_KEY:
@@ -227,9 +234,7 @@
 		return 0;
 	}
 
-	hash += ast_hashtab_hash_string(stasis_message_type_name(key->type));
-	hash += ast_hashtab_hash_string(key->id);
-	return hash;
+	return (int)key->hash;
 }
 
 static int cache_entry_cmp(void *obj, void *arg, int flags)
@@ -347,6 +352,7 @@
 
 	search_key.type = type;
 	search_key.id = id;
+	cache_entry_compute_hash(&search_key);
 	entry = ao2_find(entries, &search_key, OBJ_SEARCH_KEY | OBJ_NOLOCK);
 
 	/* Ensure that what we looked for is what we found. */




More information about the asterisk-commits mailing list