From: Richard Mudgett Date: Wed, 11 Jun 2014 22:44:30 +0000 (+0000) Subject: format.c: Fix misuse of hash container function. X-Git-Tag: 11.11.0-rc1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=33a4ae86a121926e9ae78c1b17e3cdb8adcd2e31;p=thirdparty%2Fasterisk.git 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 --- diff --git a/main/format.c b/main/format.c index a5ecaba1b6..d990ad26ea 100644 --- a/main/format.c +++ b/main/format.c @@ -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! */