When the stasis cache is used a hash is calculated for
retrieving or inserting messages. This change calculates
a hash when the message type is initialized that is then
used each time needed. This ensures that the hash is
calculated only once for the message type.
Change-Id: I4fe6bfdafb55bf5c322dd313fbd8c32cce73ef37
*/
const char *stasis_message_type_name(const struct stasis_message_type *type);
+/*!
+ * \brief Gets the hash of a given message type
+ * \param type The type to get the hash of.
+ * \return The hash
+ * \since 13.24.0
+ */
+unsigned int stasis_message_type_hash(const struct stasis_message_type *type);
+
/*!
* \brief Check whether a message type is declined
*
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 = stasis_message_type_hash(key->type);
key->hash += ast_hashtab_hash_string(key->id);
}
#include "asterisk/astobj2.h"
#include "asterisk/stasis.h"
#include "asterisk/utils.h"
+#include "asterisk/hashtab.h"
/*! \internal */
struct stasis_message_type {
struct stasis_message_vtable *vtable;
char *name;
+ unsigned int hash;
};
static struct stasis_message_vtable null_vtable = {};
ao2_cleanup(type);
return STASIS_MESSAGE_TYPE_ERROR;
}
+ type->hash = ast_hashtab_hash_string(name);
type->vtable = vtable;
*result = type;
return type->name;
}
+unsigned int stasis_message_type_hash(const struct stasis_message_type *type)
+{
+ return type->hash;
+}
+
/*! \internal */
struct stasis_message {
/*! Time the message was created */