mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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. ........ Merged revisions 415728 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@415729 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -984,10 +984,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;
|
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)
|
const struct ast_format_list *ast_format_list_get(size_t *size)
|
||||||
{
|
{
|
||||||
@@ -1040,7 +1036,7 @@ static int build_format_list_array(void)
|
|||||||
static int format_list_init(void)
|
static int format_list_init(void)
|
||||||
{
|
{
|
||||||
struct ast_format tmpfmt;
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
/* initiate static entries XXX DO NOT CHANGE THIS ORDER! */
|
/* initiate static entries XXX DO NOT CHANGE THIS ORDER! */
|
||||||
|
Reference in New Issue
Block a user