int ast_sip_initialize_scheduler(void) { if (!(scheduler_context = ast_sched_context_create())) { ast_log(LOG_ERROR, "Failed to create scheduler. Aborting load\n"); return -1; } if (ast_sched_start_thread(scheduler_context)) { ast_log(LOG_ERROR, "Failed to start scheduler. Aborting load\n"); ast_sched_context_destroy(scheduler_context); return -1; } tasks = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, TASK_BUCKETS, ast_sip_sched_task_hash_fn, ast_sip_sched_task_sort_fn, ast_sip_sched_task_cmp_fn); if (!tasks) { ast_log(LOG_ERROR, "Failed to allocate task container. Aborting load\n"); ast_sched_context_destroy(scheduler_context); return -1; } ast_cli_register_multiple(cli_commands, ARRAY_LEN(cli_commands)); return 0; }
int ast_format_init(void) { 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; } ast_register_cleanup(format_shutdown); return 0; }
int ast_named_locks_init(void) { named_locks = ao2_container_alloc_hash(0, 0, NAMED_LOCKS_BUCKETS, named_locks_hash, NULL, named_locks_cmp); if (!named_locks) { return -1; } ast_register_cleanup(named_locks_shutdown); return 0; }
int ast_sip_initialize_cli(void) { formatter_registry = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, 17, formatter_hash, formatter_sort, formatter_compare); if (!formatter_registry) { ast_log(LOG_ERROR, "Unable to create formatter_registry.\n"); return -1; } ast_cli_register_multiple(pjsip_cli, ARRAY_LEN(pjsip_cli)); return 0; }
static int load_module(void) { pthread_timers = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, PTHREAD_TIMER_BUCKETS, pthread_timer_hash, NULL, pthread_timer_cmp); if (!pthread_timers) { return AST_MODULE_LOAD_DECLINE; } if (init_timing_thread()) { ao2_ref(pthread_timers, -1); pthread_timers = NULL; return AST_MODULE_LOAD_DECLINE; } return (timing_funcs_handle = ast_register_timing_interface(&pthread_timing)) ? AST_MODULE_LOAD_SUCCESS : AST_MODULE_LOAD_DECLINE; }
struct ao2_container *ast_datastores_alloc(void) { return ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, DATASTORE_BUCKETS, ast_datastore_hash_fn, NULL, ast_datastore_cmp_fn); }
int ast_sip_initialize_distributor(void) { unidentified_requests = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, DEFAULT_SUSPECTS_BUCKETS, suspects_hash, NULL, suspects_compare); if (!unidentified_requests) { return -1; } dialog_associations = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, DIALOG_ASSOCIATIONS_BUCKETS, dialog_associations_hash, NULL, dialog_associations_cmp); if (!dialog_associations) { ast_sip_destroy_distributor(); return -1; } if (distributor_pool_setup()) { ast_sip_destroy_distributor(); return -1; } prune_context = ast_sched_context_create(); if (!prune_context) { ast_sip_destroy_distributor(); return -1; } if (ast_sched_start_thread(prune_context)) { ast_sip_destroy_distributor(); return -1; } ast_sorcery_observer_add(ast_sip_get_sorcery(), "global", &global_observer); ast_sorcery_reload_object(ast_sip_get_sorcery(), "global"); if (create_artificial_endpoint() || create_artificial_auth()) { ast_sip_destroy_distributor(); return -1; } if (ast_sip_register_service(&distributor_mod)) { ast_sip_destroy_distributor(); return -1; } if (ast_sip_register_service(&endpoint_mod)) { ast_sip_destroy_distributor(); return -1; } if (ast_sip_register_service(&auth_mod)) { ast_sip_destroy_distributor(); return -1; } unid_formatter = ao2_alloc_options(sizeof(struct ast_sip_cli_formatter_entry), NULL, AO2_ALLOC_OPT_LOCK_NOLOCK); if (!unid_formatter) { ast_sip_destroy_distributor(); ast_log(LOG_ERROR, "Unable to allocate memory for unid_formatter\n"); return -1; } unid_formatter->name = "unidentified_request"; unid_formatter->print_header = cli_unid_print_header; unid_formatter->print_body = cli_unid_print_body; unid_formatter->get_container = cli_unid_get_container; unid_formatter->iterate = cli_unid_iterate; unid_formatter->get_id = cli_unid_get_id; unid_formatter->retrieve_by_id = cli_unid_retrieve_by_id; ast_sip_register_cli_formatter(unid_formatter); ast_cli_register_multiple(cli_commands, ARRAY_LEN(cli_commands)); return 0; }