Merge "astobj2: Eliminate usage of legacy container allocation macros." into 16
This commit is contained in:
commit
4eef448acc
|
@ -35360,12 +35360,18 @@ static int load_module(void)
|
|||
|
||||
/* the fact that ao2_containers can't resize automatically is a major worry! */
|
||||
/* if the number of objects gets above MAX_XXX_BUCKETS, things will slow down */
|
||||
peers = ao2_t_container_alloc(HASH_PEER_SIZE, peer_hash_cb, peer_cmp_cb, "allocate peers");
|
||||
peers_by_ip = ao2_t_container_alloc(HASH_PEER_SIZE, peer_iphash_cb, NULL, "allocate peers_by_ip");
|
||||
dialogs = ao2_t_container_alloc(HASH_DIALOG_SIZE, dialog_hash_cb, dialog_cmp_cb, "allocate dialogs");
|
||||
dialogs_needdestroy = ao2_t_container_alloc(1, NULL, NULL, "allocate dialogs_needdestroy");
|
||||
dialogs_rtpcheck = ao2_t_container_alloc(HASH_DIALOG_SIZE, dialog_hash_cb, dialog_cmp_cb, "allocate dialogs for rtpchecks");
|
||||
threadt = ao2_t_container_alloc(HASH_DIALOG_SIZE, threadt_hash_cb, threadt_cmp_cb, "allocate threadt table");
|
||||
peers = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_PEER_SIZE,
|
||||
peer_hash_cb, NULL, peer_cmp_cb, "allocate peers");
|
||||
peers_by_ip = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_PEER_SIZE,
|
||||
peer_iphash_cb, NULL, NULL, "allocate peers_by_ip");
|
||||
dialogs = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_DIALOG_SIZE,
|
||||
dialog_hash_cb, NULL, dialog_cmp_cb, "allocate dialogs");
|
||||
dialogs_needdestroy = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, 1,
|
||||
NULL, NULL, NULL, "allocate dialogs_needdestroy");
|
||||
dialogs_rtpcheck = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_DIALOG_SIZE,
|
||||
dialog_hash_cb, NULL, dialog_cmp_cb, "allocate dialogs for rtpchecks");
|
||||
threadt = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_DIALOG_SIZE,
|
||||
threadt_hash_cb, NULL, threadt_cmp_cb, "allocate threadt table");
|
||||
if (!peers || !peers_by_ip || !dialogs || !dialogs_needdestroy || !dialogs_rtpcheck
|
||||
|| !threadt) {
|
||||
ast_log(LOG_ERROR, "Unable to create primary SIP container(s)\n");
|
||||
|
@ -35379,7 +35385,8 @@ static int load_module(void)
|
|||
}
|
||||
ast_format_cap_append_by_type(sip_tech.capabilities, AST_MEDIA_TYPE_AUDIO);
|
||||
|
||||
registry_list = ao2_t_container_alloc(HASH_REGISTRY_SIZE, registry_hash_cb, registry_cmp_cb, "allocate registry_list");
|
||||
registry_list = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, HASH_REGISTRY_SIZE,
|
||||
registry_hash_cb, NULL, registry_cmp_cb, "allocate registry_list");
|
||||
subscription_mwi_list = ao2_t_container_alloc_list(AO2_ALLOC_OPT_LOCK_MUTEX,
|
||||
AO2_CONTAINER_ALLOC_OPT_INSERT_BEGIN, NULL, NULL, "allocate subscription_mwi_list");
|
||||
|
||||
|
|
|
@ -1298,6 +1298,7 @@ typedef int (ao2_sort_fn)(const void *obj_left, const void *obj_right, int flags
|
|||
struct ao2_container;
|
||||
|
||||
/*!
|
||||
* \deprecated
|
||||
* \brief Allocate and initialize a hash container with the desired number of buckets.
|
||||
*
|
||||
* \details
|
||||
|
@ -1315,16 +1316,20 @@ struct ao2_container;
|
|||
* \note Destructor is set implicitly.
|
||||
* \note This is legacy container creation that is mapped to the new method.
|
||||
*/
|
||||
#define ao2_container_alloc(n_buckets, hash_fn, cmp_fn) \
|
||||
ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, (n_buckets), (hash_fn), NULL, (cmp_fn))
|
||||
|
||||
#ifndef AST_IN_CORE
|
||||
/* These macros are removed from Asterisk 17. They are still available to modules
|
||||
* but should only be used by third party modules that have not been updated. */
|
||||
#define ao2_t_container_alloc_options(options, n_buckets, hash_fn, cmp_fn, tag) \
|
||||
ao2_t_container_alloc_hash((options), 0, (n_buckets), (hash_fn), NULL, (cmp_fn), (tag))
|
||||
#define ao2_container_alloc_options(options, n_buckets, hash_fn, cmp_fn) \
|
||||
ao2_container_alloc_hash((options), 0, (n_buckets), (hash_fn), NULL, (cmp_fn))
|
||||
|
||||
#define ao2_t_container_alloc(n_buckets, hash_fn, cmp_fn, tag) \
|
||||
ao2_t_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, (n_buckets), (hash_fn), (cmp_fn), (tag))
|
||||
#define ao2_container_alloc(n_buckets, hash_fn, cmp_fn) \
|
||||
ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, (n_buckets), (hash_fn), (cmp_fn))
|
||||
ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, (n_buckets), (hash_fn), NULL, (cmp_fn), (tag))
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* \brief Allocate and initialize a hash container with the desired number of buckets.
|
||||
|
|
|
@ -4068,8 +4068,8 @@ struct ao2_container *ast_bridge_peers_nolock(struct ast_bridge *bridge)
|
|||
struct ao2_container *channels;
|
||||
struct ast_bridge_channel *iter;
|
||||
|
||||
channels = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK,
|
||||
13, channel_hash, channel_cmp);
|
||||
channels = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0,
|
||||
13, channel_hash, NULL, channel_cmp);
|
||||
if (!channels) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -649,8 +649,8 @@ static void *bucket_file_alloc(const char *name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
file->metadata = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, METADATA_BUCKETS,
|
||||
ast_bucket_metadata_hash_fn, ast_bucket_metadata_cmp_fn);
|
||||
file->metadata = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, METADATA_BUCKETS,
|
||||
ast_bucket_metadata_hash_fn, NULL, ast_bucket_metadata_cmp_fn);
|
||||
if (!file->metadata) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -954,8 +954,8 @@ int ast_bucket_init(void)
|
|||
{
|
||||
ast_register_cleanup(&bucket_cleanup);
|
||||
|
||||
schemes = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, SCHEME_BUCKETS,
|
||||
ast_bucket_scheme_hash_fn, ast_bucket_scheme_cmp_fn);
|
||||
schemes = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, SCHEME_BUCKETS,
|
||||
ast_bucket_scheme_hash_fn, NULL, ast_bucket_scheme_cmp_fn);
|
||||
if (!schemes) {
|
||||
ast_log(LOG_ERROR, "Failed to create container for Bucket schemes\n");
|
||||
return -1;
|
||||
|
|
17
main/ccss.c
17
main/ccss.c
|
@ -4649,14 +4649,19 @@ static int load_module(void)
|
|||
{
|
||||
int res;
|
||||
|
||||
if (!(cc_core_instances = ao2_t_container_alloc(CC_CORE_INSTANCES_BUCKETS,
|
||||
cc_core_instance_hash_fn, cc_core_instance_cmp_fn,
|
||||
"Create core instance container"))) {
|
||||
cc_core_instances = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0,
|
||||
CC_CORE_INSTANCES_BUCKETS,
|
||||
cc_core_instance_hash_fn, NULL, cc_core_instance_cmp_fn,
|
||||
"Create core instance container");
|
||||
if (!cc_core_instances) {
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
}
|
||||
if (!(generic_monitors = ao2_t_container_alloc(CC_CORE_INSTANCES_BUCKETS,
|
||||
generic_monitor_instance_list_hash_fn, generic_monitor_instance_list_cmp_fn,
|
||||
"Create generic monitor container"))) {
|
||||
|
||||
generic_monitors = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0,
|
||||
CC_CORE_INSTANCES_BUCKETS,
|
||||
generic_monitor_instance_list_hash_fn, NULL, generic_monitor_instance_list_cmp_fn,
|
||||
"Create generic monitor container");
|
||||
if (!generic_monitors) {
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
}
|
||||
if (!(cc_core_taskprocessor = ast_taskprocessor_get("CCSS_core", TPS_REF_DEFAULT))) {
|
||||
|
|
|
@ -7536,8 +7536,8 @@ struct ast_namedgroups *ast_get_namedgroups(const char *s)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
namedgroups = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 19,
|
||||
namedgroup_hash_cb, namedgroup_cmp_cb);
|
||||
namedgroups = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, 19,
|
||||
namedgroup_hash_cb, NULL, namedgroup_cmp_cb);
|
||||
if (!namedgroups) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -248,8 +248,8 @@ static void codec_shutdown(void)
|
|||
|
||||
int ast_codec_init(void)
|
||||
{
|
||||
codecs = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, CODEC_BUCKETS,
|
||||
ast_codec_hash_fn, codec_cmp);
|
||||
codecs = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, CODEC_BUCKETS,
|
||||
ast_codec_hash_fn, NULL, codec_cmp);
|
||||
if (!codecs) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -759,8 +759,8 @@ static struct features_config *__features_config_alloc(int allocate_applicationm
|
|||
return NULL;
|
||||
}
|
||||
|
||||
cfg->featuregroups = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 11, featuregroup_hash,
|
||||
featuregroup_cmp);
|
||||
cfg->featuregroups = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, 11,
|
||||
featuregroup_hash, NULL, featuregroup_cmp);
|
||||
if (!cfg->featuregroups) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -76,8 +76,8 @@ static void format_shutdown(void)
|
|||
|
||||
int ast_format_init(void)
|
||||
{
|
||||
interfaces = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, FORMAT_INTERFACE_BUCKETS,
|
||||
format_interface_hash_fn, format_interface_cmp_fn);
|
||||
interfaces = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0,
|
||||
FORMAT_INTERFACE_BUCKETS, format_interface_hash_fn, NULL, format_interface_cmp_fn);
|
||||
if (!interfaces) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -363,8 +363,8 @@ static void format_cache_shutdown(void)
|
|||
|
||||
int ast_format_cache_init(void)
|
||||
{
|
||||
formats = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, CACHE_BUCKETS,
|
||||
format_hash_cb, format_cmp_cb);
|
||||
formats = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, CACHE_BUCKETS,
|
||||
format_hash_cb, NULL, format_cmp_cb);
|
||||
if (!formats) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -697,8 +697,8 @@ int ast_media_cache_init(void)
|
|||
{
|
||||
ast_register_cleanup(media_cache_shutdown);
|
||||
|
||||
media_cache = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, AO2_BUCKETS,
|
||||
ast_sorcery_object_id_hash, ast_sorcery_object_id_compare);
|
||||
media_cache = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, AO2_BUCKETS,
|
||||
ast_sorcery_object_id_hash, NULL, ast_sorcery_object_id_compare);
|
||||
if (!media_cache) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -3054,7 +3054,7 @@ static void device_state_info_dt(void *obj)
|
|||
|
||||
static struct ao2_container *alloc_device_state_info(void)
|
||||
{
|
||||
return ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 1, NULL, NULL);
|
||||
return ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
static int ast_extension_state3(struct ast_str *hint_app, struct ao2_container *device_state_info)
|
||||
|
@ -8916,8 +8916,8 @@ int ast_pbx_init(void)
|
|||
ao2_container_register("hintdevices", hintdevices, print_hintdevices_key);
|
||||
}
|
||||
/* This is protected by the context_and_merge lock */
|
||||
autohints = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, HASH_EXTENHINT_SIZE,
|
||||
autohint_hash_cb, autohint_cmp);
|
||||
autohints = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, HASH_EXTENHINT_SIZE,
|
||||
autohint_hash_cb, NULL, autohint_cmp);
|
||||
if (autohints) {
|
||||
ao2_container_register("autohints", autohints, print_autohint_key);
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ struct ast_channel *ast_pickup_find_by_group(struct ast_channel *chan)
|
|||
struct ao2_container *candidates;/*!< Candidate channels found to pickup. */
|
||||
struct ast_channel *target;/*!< Potential pickup target */
|
||||
|
||||
candidates = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 1, NULL, NULL);
|
||||
candidates = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, NULL, NULL);
|
||||
if (!candidates) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -621,8 +621,8 @@ struct ast_sorcery *__ast_sorcery_open(const char *module_name, const char *file
|
|||
goto failure_cleanup;
|
||||
}
|
||||
|
||||
sorcery->types = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, TYPE_BUCKETS,
|
||||
ast_sorcery_object_type_hash_fn, ast_sorcery_object_type_cmp_fn);
|
||||
sorcery->types = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, TYPE_BUCKETS,
|
||||
ast_sorcery_object_type_hash_fn, NULL, ast_sorcery_object_type_cmp_fn);
|
||||
if (!sorcery->types) {
|
||||
goto failure_cleanup;
|
||||
}
|
||||
|
@ -1792,7 +1792,8 @@ void *ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const ch
|
|||
|
||||
/* If returning multiple objects create a container to store them in */
|
||||
if ((flags & AST_RETRIEVE_FLAG_MULTIPLE)) {
|
||||
if (!(object = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 1, NULL, NULL))) {
|
||||
object = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, NULL, NULL);
|
||||
if (!object) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1836,7 +1837,12 @@ struct ao2_container *ast_sorcery_retrieve_by_regex(const struct ast_sorcery *so
|
|||
struct ao2_container *objects;
|
||||
int i;
|
||||
|
||||
if (!object_type || !(objects = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 1, NULL, NULL))) {
|
||||
if (!object_type) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
objects = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, NULL, NULL);
|
||||
if (!objects) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1866,7 +1872,12 @@ struct ao2_container *ast_sorcery_retrieve_by_prefix(const struct ast_sorcery *s
|
|||
struct ao2_container *objects;
|
||||
int i;
|
||||
|
||||
if (!object_type || !(objects = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, 1, NULL, NULL))) {
|
||||
if (!object_type) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
objects = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, NULL, NULL);
|
||||
if (!objects) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -2005,7 +2005,9 @@ static int load_module(void)
|
|||
{
|
||||
int res;
|
||||
|
||||
if (!(mohclasses = ao2_t_container_alloc(53, moh_class_hash, moh_class_cmp, "Moh class container"))) {
|
||||
mohclasses = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, 53,
|
||||
moh_class_hash, NULL, moh_class_cmp, "Moh class container");
|
||||
if (!mohclasses) {
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
|
|
|
@ -226,9 +226,9 @@ static void *notify_cfg_alloc(void)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (!(cfg->notify_options = ao2_container_alloc_options(
|
||||
AO2_ALLOC_OPT_LOCK_NOLOCK, 20, notify_option_hash,
|
||||
notify_option_cmp))) {
|
||||
cfg->notify_options = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0,
|
||||
20, notify_option_hash, NULL, notify_option_cmp);
|
||||
if (!cfg->notify_options) {
|
||||
ao2_cleanup(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1555,9 +1555,9 @@ static int sip_outbound_publish_apply(const struct ast_sorcery *sorcery, void *o
|
|||
* object if created/updated, or keep the old object if an error occurs.
|
||||
*/
|
||||
if (!new_states) {
|
||||
new_states = ao2_container_alloc_options(
|
||||
AO2_ALLOC_OPT_LOCK_NOLOCK, DEFAULT_STATE_BUCKETS,
|
||||
outbound_publish_state_hash, outbound_publish_state_cmp);
|
||||
new_states = ao2_container_alloc_hash(
|
||||
AO2_ALLOC_OPT_LOCK_NOLOCK, 0, DEFAULT_STATE_BUCKETS,
|
||||
outbound_publish_state_hash, NULL, outbound_publish_state_cmp);
|
||||
|
||||
if (!new_states) {
|
||||
ast_log(LOG_ERROR, "Unable to allocate new states container\n");
|
||||
|
|
|
@ -1556,9 +1556,9 @@ static void *sorcery_memory_cache_open(const char *data)
|
|||
}
|
||||
}
|
||||
|
||||
cache->objects = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK,
|
||||
cache->objects = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0,
|
||||
cache->maximum_objects ? cache->maximum_objects : CACHE_CONTAINER_BUCKET_SIZE,
|
||||
sorcery_memory_cached_object_hash, sorcery_memory_cached_object_cmp);
|
||||
sorcery_memory_cached_object_hash, NULL, sorcery_memory_cached_object_cmp);
|
||||
if (!cache->objects) {
|
||||
ast_log(LOG_ERROR, "Could not create a container to hold cached objects for memory cache\n");
|
||||
return NULL;
|
||||
|
|
|
@ -194,7 +194,9 @@ static struct ast_srtp *res_srtp_new(void)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (!(srtp->policies = ao2_t_container_alloc(5, policy_hash_fn, policy_cmp_fn, "SRTP policy container"))) {
|
||||
srtp->policies = ao2_t_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, 5,
|
||||
policy_hash_fn, NULL, policy_cmp_fn, "SRTP policy container");
|
||||
if (!srtp->policies) {
|
||||
ast_free(srtp);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -456,7 +456,7 @@ static int astobj2_test_1_helper(int tst_num, enum test_container_type type, int
|
|||
test_sort_cb, test_cmp_cb, "test");
|
||||
break;
|
||||
}
|
||||
c2 = ao2_t_container_alloc(1, NULL, NULL, "test");
|
||||
c2 = ao2_t_container_alloc_list(AO2_ALLOC_OPT_LOCK_MUTEX, 0, NULL, NULL, "test");
|
||||
|
||||
if (!c1 || !c2) {
|
||||
ast_test_status_update(test, "ao2_container_alloc failed.\n");
|
||||
|
|
Loading…
Reference in New Issue