format.c: Fix misuse of hash container function.

The supplied hash function to a container must be idempotent given the
object's key value to figure out which container bucket the object belongs
in.  Returning a random number or the current container count is not
idempotent.  The "computed hash" value doesn't help find the object later
in those cases.

* Fixed the format_list container to actually be a list since that is how
the container is used.  Conceptually, if more than 283 formats were added
to the format_list then odd things may have happened before the fix.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@415728 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/61/61/1
Richard Mudgett 12 years ago
parent 73945f9a97
commit 33a4ae86a1

@ -973,10 +973,6 @@ static int list_cmp_cb(void *obj, void *arg, int flags)
return (ast_format_cmp(&entry1->format, &entry2->format) == AST_FORMAT_CMP_EQUAL) ? CMP_MATCH | CMP_STOP : 0;
}
static int list_hash_cb(const void *obj, const int flags)
{
return ao2_container_count(format_list);
}
const struct ast_format_list *ast_format_list_get(size_t *size)
{
@ -1029,7 +1025,7 @@ static int build_format_list_array(void)
static int format_list_init(void)
{
struct ast_format tmpfmt;
if (!(format_list = ao2_container_alloc(283, list_hash_cb, list_cmp_cb))) {
if (!(format_list = ao2_container_alloc(1, NULL, list_cmp_cb))) {
return -1;
}
/* initiate static entries XXX DO NOT CHANGE THIS ORDER! */

Loading…
Cancel
Save