static void astdb_shutdown(void) { ast_cli_unregister_multiple(cli_database, ARRAY_LEN(cli_database)); ast_manager_unregister("DBGet"); ast_manager_unregister("DBPut"); ast_manager_unregister("DBDel"); ast_manager_unregister("DBDelTree"); ast_mutex_lock(&dblock); doexit = 1; db_sync(); ast_mutex_unlock(&dblock); pthread_join(syncthread, NULL); #if defined(DEBUG_FD_LEAKS) && defined(close) /* DEBUG_FD_LEAKS causes conflicting define of close() in asterisk.h */ #undef close #endif if (astdb) { astdb->close(astdb); astdb = NULL; } }
int ast_sip_destroy_sorcery_auth(void) { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(cli_formatter); return 0; }
/*! * \internal * \brief Shutdown the local proxy channel. * \since 12.0.0 * * \return Nothing */ static void local_shutdown(void) { struct local_pvt *p; struct ao2_iterator it; /* First, take us out of the channel loop */ ast_cli_unregister_multiple(cli_local, ARRAY_LEN(cli_local)); ast_manager_unregister("LocalOptimizeAway"); ast_channel_unregister(&local_tech); it = ao2_iterator_init(locals, 0); while ((p = ao2_iterator_next(&it))) { if (p->base.owner) { ast_softhangup(p->base.owner, AST_SOFTHANGUP_APPUNLOAD); } ao2_ref(p, -1); } ao2_iterator_destroy(&it); ao2_ref(locals, -1); locals = NULL; ao2_cleanup(local_tech.capabilities); local_tech.capabilities = NULL; STASIS_MESSAGE_TYPE_CLEANUP(ast_local_optimization_begin_type); STASIS_MESSAGE_TYPE_CLEANUP(ast_local_optimization_end_type); STASIS_MESSAGE_TYPE_CLEANUP(ast_local_bridge_type); }
static int unload_module(void) { ast_manager_unregister("PJSIPNotify"); ast_cli_unregister_multiple(cli_options, ARRAY_LEN(cli_options)); aco_info_destroy(¬ify_cfg); return 0; }
/*! \brief Function called to unload the module */ static int unload_module(void) { ao2_ref(cli_aliases, -1); ast_cli_unregister_multiple(cli_alias, ARRAY_LEN(cli_alias)); return 0; }
void ast_res_pjsip_cleanup_options_handling(void) { ast_cli_unregister_multiple(cli_options, ARRAY_LEN(cli_options)); ast_manager_unregister("PJSIPQualify"); internal_sip_unregister_endpoint_formatter(&contact_status_formatter); pjsip_endpt_unregister_module(ast_sip_get_pjsip_endpoint(), &options_module); ao2_cleanup(sched_qualifies); sched_qualifies = NULL; }
static int unload_module(void) { ast_cli_unregister_multiple(cli_pjsip, ARRAY_LEN(cli_pjsip)); ast_sip_unregister_service(&logging_module); ast_sorcery_observer_remove( ast_sip_get_sorcery(), "global", &global_observer); return 0; }
int ast_sip_destroy_sorcery_location(void) { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(contact_formatter); ast_sip_unregister_cli_formatter(aor_formatter); internal_sip_unregister_endpoint_formatter(&endpoint_aor_formatter); return 0; }
static void astobj2_cleanup(void) { #if defined(AO2_DEBUG) ast_cli_unregister_multiple(cli_astobj2, ARRAY_LEN(cli_astobj2)); #endif #ifdef REF_DEBUG fclose(ref_log); ref_log = NULL; #endif }
int ast_sip_destroy_sorcery_auth(void) { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(cli_formatter); ast_sip_unregister_endpoint_formatter(&endpoint_auth_formatter); ast_manager_unregister("PJSIPShowAuths"); return 0; }
/* * Standard module functions ... */ static int unload_module(void) { /* remove the registed indications... */ ast_unregister_indication_country(NULL); /* and the functions */ ast_cli_unregister_multiple(cli_indications, sizeof(cli_indications) / sizeof(struct ast_cli_entry)); ast_unregister_application("PlayTones"); ast_unregister_application("StopPlayTones"); return 0; }
static int unload_module(void) { int res; res = ast_cli_unregister_multiple(cli_cbmysql, ARRAY_LEN(cli_cbmysql)); res |= ast_unregister_application(app); ast_module_user_hangup_all(); return res; }
int ast_sip_destroy_scheduler(void) { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); if (scheduler_context) { ast_sched_context_destroy(scheduler_context); } ao2_cleanup(tasks); tasks = NULL; return 0; }
static int unload_module(void) { ast_vm_unregister(vm_table.module_name); #if defined(MWI_DEBUG_CLI) ast_cli_unregister_multiple(mwi_cli, ARRAY_LEN(mwi_cli)); #endif /* defined(MWI_DEBUG_CLI) */ ast_sorcery_observer_remove(mwi_sorcery, MWI_MAILBOX_TYPE, &mwi_observers); ast_sorcery_unref(mwi_sorcery); mwi_sorcery = NULL; return 0; }
/*! \brief Function called to unload the module */ static int unload_module(void) { ao2_callback(cli_aliases, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, alias_unregister_cb, NULL); if (ao2_container_count(cli_aliases)) { ast_log(LOG_ERROR, "Could not unregister all CLI aliases\n"); return -1; } ao2_ref(cli_aliases, -1); ast_cli_unregister_multiple(cli_alias, ARRAY_LEN(cli_alias)); return 0; }
static int unload_module(void) { ast_debug(1, "Unloading res_config_redis...\n"); ast_mutex_lock(&redis_lock); if (redisConn) { // disconnect redisConn = NULL; } ast_cli_unregister_multiple(cli_realtime, ARRAY_LEN(cli_realtime)); ast_config_engine_deregister(&redis_engine); /* Unlock so something else can destroy the lock. */ ast_mutex_unlock(&redis_lock); ast_debug(1, "Done Unloading res_config_redis...\n"); return 0; }
/*! * \internal * \brief Shutdown the local proxy channel. * \since 12.0.0 * * \return Nothing */ static void local_shutdown(void) { /* First, take us out of the channel loop */ ast_cli_unregister_multiple(cli_local, ARRAY_LEN(cli_local)); ast_manager_unregister("LocalOptimizeAway"); ast_channel_unregister(&local_tech); ao2_ref(locals, -1); locals = NULL; ao2_cleanup(local_tech.capabilities); local_tech.capabilities = NULL; STASIS_MESSAGE_TYPE_CLEANUP(ast_local_optimization_begin_type); STASIS_MESSAGE_TYPE_CLEANUP(ast_local_optimization_end_type); STASIS_MESSAGE_TYPE_CLEANUP(ast_local_bridge_type); }
static int unload_module(void) { /* Acquire control before doing anything to the module itself. */ ast_mutex_lock(&pgsql_lock); if (pgsqlConn) { PQfinish(pgsqlConn); pgsqlConn = NULL; } ast_cli_unregister_multiple(cli_realtime, sizeof(cli_realtime) / sizeof(struct ast_cli_entry)); ast_config_engine_deregister(&pgsql_engine); ast_verb(1, "PostgreSQL RealTime unloaded.\n"); /* Unlock so something else can destroy the lock. */ ast_mutex_unlock(&pgsql_lock); return 0; }
static int unload_module(void) { int res; res = ast_unregister_translator(&opustolin); res |= ast_unregister_translator(&lintoopus); res |= ast_unregister_translator(&opustolin12); res |= ast_unregister_translator(&lin12toopus); res |= ast_unregister_translator(&opustolin16); res |= ast_unregister_translator(&lin16toopus); res |= ast_unregister_translator(&opustolin24); res |= ast_unregister_translator(&lin24toopus); res |= ast_unregister_translator(&opustolin48); res |= ast_unregister_translator(&lin48toopus); ast_cli_unregister_multiple(cli, ARRAY_LEN(cli)); return res; }
int ast_ais_clm_unload_module(void) { SaAisErrorT ais_res; if (clm_init_res != SA_AIS_OK) { return 0; } ast_cli_unregister_multiple(ais_cli, ARRAY_LEN(ais_cli)); ais_res = saClmFinalize(clm_handle); if (ais_res != SA_AIS_OK) { ast_log(LOG_ERROR, "Problem stopping cluster membership service: %s\n", ais_err2str(ais_res)); return -1; } return 0; }
/*! * \internal * \brief Clean up resources on Asterisk shutdown */ static void astdb_atexit(void) { ast_cli_unregister_multiple(cli_database, ARRAY_LEN(cli_database)); ast_manager_unregister("DBGet"); ast_manager_unregister("DBPut"); ast_manager_unregister("DBDel"); ast_manager_unregister("DBDelTree"); /* Set doexit to 1 to kill thread. db_sync must be called with * mutex held. */ doexit = 1; ast_mutex_lock(&dblock); db_sync(); ast_mutex_unlock(&dblock); pthread_join(syncthread, NULL); ast_mutex_lock(&dblock); clean_statements(); if (sqlite3_close(astdb) == SQLITE_OK) { astdb = NULL; } ast_mutex_unlock(&dblock); }
void ast_sip_destroy_distributor(void) { ast_cli_unregister_multiple(cli_commands, ARRAY_LEN(cli_commands)); ast_sip_unregister_cli_formatter(unid_formatter); ast_sip_unregister_service(&auth_mod); ast_sip_unregister_service(&endpoint_mod); ast_sip_unregister_service(&distributor_mod); ao2_global_obj_release(artificial_auth); ao2_cleanup(artificial_endpoint); ast_sorcery_observer_remove(ast_sip_get_sorcery(), "global", &global_observer); if (prune_context) { ast_sched_context_destroy(prune_context); } distributor_pool_shutdown(); ao2_cleanup(dialog_associations); ao2_cleanup(unidentified_requests); }
/*! \brief Function called when the process is shutting down */ static void codec_shutdown(void) { ast_cli_unregister_multiple(codec_cli, ARRAY_LEN(codec_cli)); ao2_cleanup(codecs); codecs = NULL; }
static int unload_module(void) { ast_cli_unregister_multiple(cli_convert, ARRAY_LEN(cli_convert)); return 0; }
static int unload_module(void) { AST_TEST_UNREGISTER(sched_test_order); ast_cli_unregister_multiple(cli_sched, ARRAY_LEN(cli_sched)); return 0; }
void unload_parking_ui(void) { ast_cli_unregister_multiple(cli_parking_lot, ARRAY_LEN(cli_parking_lot)); }
static char *timing_test(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { struct ast_timer *timer; int count = 0; struct timeval start, end; unsigned int test_rate = 50; switch (cmd) { case CLI_INIT: e->command = "timing test"; e->usage = "Usage: timing test <rate>\n" " Test a timer with a specified rate, 50/sec by default.\n" ""; return NULL; case CLI_GENERATE: return NULL; } if (a->argc != 2 && a->argc != 3) { return CLI_SHOWUSAGE; } if (a->argc == 3) { unsigned int rate; if (sscanf(a->argv[2], "%30u", &rate) == 1) { test_rate = rate; } else { ast_cli(a->fd, "Invalid rate '%s', using default of %u\n", a->argv[2], test_rate); } } ast_cli(a->fd, "Attempting to test a timer with %u ticks per second.\n", test_rate); if (!(timer = ast_timer_open())) { ast_cli(a->fd, "Failed to open timing fd\n"); return CLI_FAILURE; } ast_cli(a->fd, "Using the '%s' timing module for this test.\n", timer->holder->iface->name); start = ast_tvnow(); ast_timer_set_rate(timer, test_rate); while (ast_tvdiff_ms((end = ast_tvnow()), start) < 1000) { int res; struct pollfd pfd = { .fd = ast_timer_fd(timer), .events = POLLIN | POLLPRI, }; res = ast_poll(&pfd, 1, 100); if (res == 1) { count++; if (ast_timer_ack(timer, 1) < 0) { ast_cli(a->fd, "Timer failed to acknowledge.\n"); ast_timer_close(timer); return CLI_FAILURE; } } else if (!res) { ast_cli(a->fd, "poll() timed out! This is bad.\n"); } else if (errno != EAGAIN && errno != EINTR) { ast_cli(a->fd, "poll() returned error: %s\n", strerror(errno)); } } ast_timer_close(timer); timer = NULL; ast_cli(a->fd, "It has been %" PRIi64 " milliseconds, and we got %d timer ticks\n", ast_tvdiff_ms(end, start), count); return CLI_SUCCESS; } static struct ast_cli_entry cli_timing[] = { AST_CLI_DEFINE(timing_test, "Run a timing test"), }; static void timing_shutdown(void) { ast_cli_unregister_multiple(cli_timing, ARRAY_LEN(cli_timing)); ast_heap_destroy(timing_interfaces); timing_interfaces = NULL; }
static int unload_module(void) { ast_manager_unregister_hook(&test_hook); return ast_cli_unregister_multiple(cli_amihook_evt, ARRAY_LEN(cli_amihook_evt)); }
static int unload_module(void) { ast_cli_unregister_multiple(cli_realtime, ARRAY_LEN(cli_realtime)); return 0; }
static int unload_module(void) { ast_cli_unregister_multiple(cli_entries, ARRAY_LEN(cli_entries)); return 0; }