[asterisk-commits] file: branch file/usecnt-cleanup r54143 - in
/team/file/usecnt-cleanup: chann...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Mon Feb 12 17:42:38 MST 2007
Author: file
Date: Mon Feb 12 18:42:37 2007
New Revision: 54143
URL: http://svn.digium.com/view/asterisk?view=rev&rev=54143
Log:
Switch CLI commands over to using the module reference counting, but this time do it differently - use a macro to replace the old function's name and prefix the original one with __. Less work that way and modules automagically do things correctly in most cases.
Modified:
team/file/usecnt-cleanup/channels/iax2-provision.c
team/file/usecnt-cleanup/include/asterisk/cli.h
team/file/usecnt-cleanup/main/asterisk.c
team/file/usecnt-cleanup/main/cdr.c
team/file/usecnt-cleanup/main/channel.c
team/file/usecnt-cleanup/main/cli.c
team/file/usecnt-cleanup/main/config.c
team/file/usecnt-cleanup/main/db.c
team/file/usecnt-cleanup/main/dnsmgr.c
team/file/usecnt-cleanup/main/file.c
team/file/usecnt-cleanup/main/frame.c
team/file/usecnt-cleanup/main/http.c
team/file/usecnt-cleanup/main/image.c
team/file/usecnt-cleanup/main/logger.c
team/file/usecnt-cleanup/main/manager.c
team/file/usecnt-cleanup/main/pbx.c
team/file/usecnt-cleanup/main/rtp.c
team/file/usecnt-cleanup/main/translate.c
team/file/usecnt-cleanup/main/udptl.c
team/file/usecnt-cleanup/utils/ael_main.c
Modified: team/file/usecnt-cleanup/channels/iax2-provision.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/channels/iax2-provision.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/channels/iax2-provision.c (original)
+++ team/file/usecnt-cleanup/channels/iax2-provision.c Mon Feb 12 18:42:37 2007
@@ -474,7 +474,7 @@
static int iax_provision_init(void)
{
- ast_cli_register_multiple(cli_iax2_provision, sizeof(cli_iax2_provision) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_iax2_provision, sizeof(cli_iax2_provision) / sizeof(struct ast_cli_entry), NULL);
provinit = 1;
return 0;
}
Modified: team/file/usecnt-cleanup/include/asterisk/cli.h
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/include/asterisk/cli.h?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/include/asterisk/cli.h (original)
+++ team/file/usecnt-cleanup/include/asterisk/cli.h Mon Feb 12 18:42:37 2007
@@ -178,8 +178,7 @@
char *(*generator)(const char *line, const char *word, int pos, int n);
struct ast_cli_entry *deprecate_cmd;
- int inuse; /*!< For keeping track of usage */
- struct module *module; /*!< module this belongs to */
+ struct ast_module *module; /*!< module this belongs to */
char *_full_cmd; /*!< built at load time from cmda[] */
int cmdlen; /*!< len up to the first invalid char [<{% */
/*! \brief This gets set in ast_cli_register()
@@ -228,14 +227,16 @@
* Register your own command
* Returns 0 on success, -1 on failure
*/
-int ast_cli_register(struct ast_cli_entry *e);
+#define ast_cli_register(a) __ast_cli_register(a, ast_module_info->self)
+int __ast_cli_register(struct ast_cli_entry *e, struct ast_module *mod);
/*!
* \brief Register multiple commands
* \param e pointer to first cli entry to register
* \param len number of entries to register
*/
-void ast_cli_register_multiple(struct ast_cli_entry *e, int len);
+#define ast_cli_register_multiple(a,b) __ast_cli_register_multiple(a, b, ast_module_info->self)
+void __ast_cli_register_multiple(struct ast_cli_entry *e, int len, struct ast_module *mod);
/*! \brief Unregisters a command or an array of commands
*
Modified: team/file/usecnt-cleanup/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/asterisk.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/asterisk.c (original)
+++ team/file/usecnt-cleanup/main/asterisk.c Mon Feb 12 18:42:37 2007
@@ -2784,7 +2784,7 @@
#endif
time(&ast_startuptime);
- ast_cli_register_multiple(cli_asterisk, sizeof(cli_asterisk) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_asterisk, sizeof(cli_asterisk) / sizeof(struct ast_cli_entry), NULL);
if (ast_opt_console) {
/* Console stuff now... */
Modified: team/file/usecnt-cleanup/main/cdr.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/cdr.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/cdr.c (original)
+++ team/file/usecnt-cleanup/main/cdr.c Mon Feb 12 18:42:37 2007
@@ -1107,7 +1107,7 @@
ast_log(LOG_ERROR, "Unable to start CDR thread.\n");
ast_sched_del(sched, cdr_sched);
} else {
- ast_cli_register(&cli_submit);
+ __ast_cli_register(&cli_submit, NULL);
ast_register_atexit(ast_cdr_engine_term);
res = 0;
}
@@ -1148,7 +1148,7 @@
return -1;
}
- ast_cli_register(&cli_status);
+ __ast_cli_register(&cli_status, NULL);
res = do_reload();
if (res) {
Modified: team/file/usecnt-cleanup/main/channel.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/channel.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/channel.c (original)
+++ team/file/usecnt-cleanup/main/channel.c Mon Feb 12 18:42:37 2007
@@ -4306,7 +4306,7 @@
void ast_channels_init(void)
{
- ast_cli_register_multiple(cli_channel, sizeof(cli_channel) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_channel, sizeof(cli_channel) / sizeof(struct ast_cli_entry), NULL);
}
/*! \brief Print call group and pickup group ---*/
Modified: team/file/usecnt-cleanup/main/cli.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/cli.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/cli.c (original)
+++ team/file/usecnt-cleanup/main/cli.c Mon Feb 12 18:42:37 2007
@@ -1050,7 +1050,7 @@
for (e = builtins; e->cmda[0] != NULL; e++)
set_full_cmd(e);
- ast_cli_register_multiple(cli_cli, sizeof(cli_cli) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_cli, sizeof(cli_cli) / sizeof(struct ast_cli_entry), NULL);
}
/*
@@ -1244,26 +1244,22 @@
if (e->deprecate_cmd) {
__ast_cli_unregister(e->deprecate_cmd, e);
}
- if (e->inuse) {
- ast_log(LOG_WARNING, "Can't remove command that is in use\n");
- } else {
- AST_LIST_LOCK(&helpers);
- AST_LIST_REMOVE(&helpers, e, list);
- AST_LIST_UNLOCK(&helpers);
- free(e->_full_cmd);
- e->_full_cmd = NULL;
- if (e->new_handler) {
- /* this is a new-style entry. Reset fields and free memory. */
- bzero((char **)(e->cmda), sizeof(e->cmda));
- free(e->command);
- e->command = NULL;
- e->usage = NULL;
- }
+ AST_LIST_LOCK(&helpers);
+ AST_LIST_REMOVE(&helpers, e, list);
+ AST_LIST_UNLOCK(&helpers);
+ free(e->_full_cmd);
+ e->_full_cmd = NULL;
+ if (e->new_handler) {
+ /* this is a new-style entry. Reset fields and free memory. */
+ bzero((char **)(e->cmda), sizeof(e->cmda));
+ free(e->command);
+ e->command = NULL;
+ e->usage = NULL;
}
return 0;
}
-static int __ast_cli_register(struct ast_cli_entry *e, struct ast_cli_entry *ed)
+static int ____ast_cli_register(struct ast_cli_entry *e, struct ast_cli_entry *ed, struct ast_module *mod)
{
struct ast_cli_entry *cur;
int i, lf, ret = -1;
@@ -1333,7 +1329,7 @@
if (e->deprecate_cmd) {
/* This command deprecates another command. Register that one also. */
- __ast_cli_register(e->deprecate_cmd, e);
+ ____ast_cli_register(e->deprecate_cmd, e, mod);
}
return ret;
@@ -1346,20 +1342,20 @@
}
/* wrapper function, so we can register deprecated commands recursively */
-int ast_cli_register(struct ast_cli_entry *e)
-{
- return __ast_cli_register(e, NULL);
+int __ast_cli_register(struct ast_cli_entry *e, struct ast_module *mod)
+{
+ return ____ast_cli_register(e, NULL, mod);
}
/*
* register/unregister an array of entries.
*/
-void ast_cli_register_multiple(struct ast_cli_entry *e, int len)
+void __ast_cli_register_multiple(struct ast_cli_entry *e, int len, struct ast_module *mod)
{
int i;
for (i = 0; i < len; i++)
- ast_cli_register(e + i);
+ __ast_cli_register(e + i, mod);
}
void ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
@@ -1695,8 +1691,8 @@
AST_LIST_LOCK(&helpers);
e = find_cli(args + 1, 0);
- if (e)
- ast_atomic_fetchadd_int(&e->inuse, 1);
+ if (e && e->module)
+ ast_module_ref(e->module);
AST_LIST_UNLOCK(&helpers);
if (e == NULL) {
ast_cli(fd, "No such command '%s' (type 'help' for help)\n", find_best(args + 1));
@@ -1739,7 +1735,8 @@
AST_LIST_UNLOCK(&helpers);
break;
}
- ast_atomic_fetchadd_int(&e->inuse, -1);
+ if (e->module)
+ ast_module_unref(e->module);
done:
free(dup);
return 0;
Modified: team/file/usecnt-cleanup/main/config.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/config.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/config.c (original)
+++ team/file/usecnt-cleanup/main/config.c Mon Feb 12 18:42:37 2007
@@ -1453,6 +1453,6 @@
int register_config_cli()
{
- ast_cli_register_multiple(cli_config, sizeof(cli_config) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_config, sizeof(cli_config) / sizeof(struct ast_cli_entry), NULL);
return 0;
}
Modified: team/file/usecnt-cleanup/main/db.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/db.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/db.c (original)
+++ team/file/usecnt-cleanup/main/db.c Mon Feb 12 18:42:37 2007
@@ -640,7 +640,7 @@
int astdb_init(void)
{
dbinit();
- ast_cli_register_multiple(cli_database, sizeof(cli_database) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_database, sizeof(cli_database) / sizeof(struct ast_cli_entry), NULL);
ast_manager_register("DBGet", EVENT_FLAG_SYSTEM, manager_dbget, "Get DB Entry");
ast_manager_register("DBPut", EVENT_FLAG_SYSTEM, manager_dbput, "Put DB Entry");
ast_manager_register("DBDel", EVENT_FLAG_SYSTEM, manager_dbdel, "Delete DB Entry");
Modified: team/file/usecnt-cleanup/main/dnsmgr.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/dnsmgr.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/dnsmgr.c (original)
+++ team/file/usecnt-cleanup/main/dnsmgr.c Mon Feb 12 18:42:37 2007
@@ -339,8 +339,8 @@
ast_log(LOG_ERROR, "Unable to create schedule context.\n");
return -1;
}
- ast_cli_register(&cli_reload);
- ast_cli_register(&cli_status);
+ __ast_cli_register(&cli_reload, NULL);
+ __ast_cli_register(&cli_status, NULL);
return do_reload(1);
}
@@ -394,7 +394,7 @@
if (ast_pthread_create_background(&refresh_thread, NULL, do_refresh, NULL) < 0) {
ast_log(LOG_ERROR, "Unable to start refresh thread.\n");
}
- ast_cli_register(&cli_refresh);
+ __ast_cli_register(&cli_refresh, NULL);
}
/* make a background refresh happen right away */
refresh_sched = ast_sched_add_variable(sched, 100, refresh_list, &master_refresh_info, 1);
Modified: team/file/usecnt-cleanup/main/file.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/file.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/file.c (original)
+++ team/file/usecnt-cleanup/main/file.c Mon Feb 12 18:42:37 2007
@@ -1148,6 +1148,6 @@
int ast_file_init(void)
{
- ast_cli_register_multiple(cli_file, sizeof(cli_file) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_file, sizeof(cli_file) / sizeof(struct ast_cli_entry), NULL);
return 0;
}
Modified: team/file/usecnt-cleanup/main/frame.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/frame.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/frame.c (original)
+++ team/file/usecnt-cleanup/main/frame.c Mon Feb 12 18:42:37 2007
@@ -929,7 +929,7 @@
int init_framer(void)
{
- ast_cli_register_multiple(my_clis, sizeof(my_clis) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(my_clis, sizeof(my_clis) / sizeof(struct ast_cli_entry), NULL);
return 0;
}
Modified: team/file/usecnt-cleanup/main/http.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/http.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/http.c (original)
+++ team/file/usecnt-cleanup/main/http.c Mon Feb 12 18:42:37 2007
@@ -1006,6 +1006,6 @@
{
ast_http_uri_link(&statusuri);
ast_http_uri_link(&staticuri);
- ast_cli_register_multiple(cli_http, sizeof(cli_http) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_http, sizeof(cli_http) / sizeof(struct ast_cli_entry), NULL);
return __ast_http_load(0);
}
Modified: team/file/usecnt-cleanup/main/image.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/image.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/image.c (original)
+++ team/file/usecnt-cleanup/main/image.c Mon Feb 12 18:42:37 2007
@@ -205,6 +205,6 @@
int ast_image_init(void)
{
- ast_cli_register_multiple(cli_image, sizeof(cli_image) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_image, sizeof(cli_image) / sizeof(struct ast_cli_entry), NULL);
return 0;
}
Modified: team/file/usecnt-cleanup/main/logger.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/logger.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/logger.c (original)
+++ team/file/usecnt-cleanup/main/logger.c Mon Feb 12 18:42:37 2007
@@ -792,7 +792,7 @@
}
/* register the logger cli commands */
- ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_logger, sizeof(cli_logger) / sizeof(struct ast_cli_entry), NULL);
mkdir(ast_config_AST_LOG_DIR, 0755);
Modified: team/file/usecnt-cleanup/main/manager.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/manager.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/manager.c (original)
+++ team/file/usecnt-cleanup/main/manager.c Mon Feb 12 18:42:37 2007
@@ -2968,7 +2968,7 @@
ast_manager_register2("UserEvent", EVENT_FLAG_USER, action_userevent, "Send an arbitrary event", mandescr_userevent);
ast_manager_register2("WaitEvent", 0, action_waitevent, "Wait for an event to occur", mandescr_waitevent);
- ast_cli_register_multiple(cli_manager, sizeof(cli_manager) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_manager, sizeof(cli_manager) / sizeof(struct ast_cli_entry), NULL);
ast_extension_state_add(NULL, NULL, manager_state_cb, NULL);
registered = 1;
/* Append placeholder event so master_eventq never runs dry */
Modified: team/file/usecnt-cleanup/main/pbx.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/pbx.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/pbx.c (original)
+++ team/file/usecnt-cleanup/main/pbx.c Mon Feb 12 18:42:37 2007
@@ -5968,7 +5968,7 @@
ast_verbose( "Asterisk PBX Core Initializing\n");
ast_verbose( "Registering builtin applications:\n");
}
- ast_cli_register_multiple(pbx_cli, sizeof(pbx_cli) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(pbx_cli, sizeof(pbx_cli) / sizeof(struct ast_cli_entry), NULL);
/* Register builtin applications */
for (x=0; x<sizeof(builtins) / sizeof(struct pbx_builtin); x++) {
Modified: team/file/usecnt-cleanup/main/rtp.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/rtp.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/rtp.c (original)
+++ team/file/usecnt-cleanup/main/rtp.c Mon Feb 12 18:42:37 2007
@@ -3671,7 +3671,7 @@
/*! \brief Initialize the RTP system in Asterisk */
void ast_rtp_init(void)
{
- ast_cli_register_multiple(cli_rtp, sizeof(cli_rtp) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_rtp, sizeof(cli_rtp) / sizeof(struct ast_cli_entry), NULL);
ast_rtp_reload();
}
Modified: team/file/usecnt-cleanup/main/translate.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/translate.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/translate.c (original)
+++ team/file/usecnt-cleanup/main/translate.c Mon Feb 12 18:42:37 2007
@@ -635,7 +635,7 @@
}
if (!added_cli) {
- ast_cli_register_multiple(cli_translate, sizeof(cli_translate) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_translate, sizeof(cli_translate) / sizeof(struct ast_cli_entry), NULL);
added_cli++;
}
Modified: team/file/usecnt-cleanup/main/udptl.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/main/udptl.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/main/udptl.c (original)
+++ team/file/usecnt-cleanup/main/udptl.c Mon Feb 12 18:42:37 2007
@@ -1285,6 +1285,6 @@
void ast_udptl_init(void)
{
- ast_cli_register_multiple(cli_udptl, sizeof(cli_udptl) / sizeof(struct ast_cli_entry));
+ __ast_cli_register_multiple(cli_udptl, sizeof(cli_udptl) / sizeof(struct ast_cli_entry), NULL);
ast_udptl_reload();
}
Modified: team/file/usecnt-cleanup/utils/ael_main.c
URL: http://svn.digium.com/view/asterisk/team/file/usecnt-cleanup/utils/ael_main.c?view=diff&rev=54143&r1=54142&r2=54143
==============================================================================
--- team/file/usecnt-cleanup/utils/ael_main.c (original)
+++ team/file/usecnt-cleanup/utils/ael_main.c Mon Feb 12 18:42:37 2007
@@ -75,7 +75,7 @@
char ast_config_AST_VAR_DIR[PATH_MAX];
void ast_add_profile(void);
-void ast_cli_register_multiple(void);
+void __ast_cli_register_multiple(void);
void ast_register_file_version(void);
void ast_unregister_file_version(void);
int ast_add_extension2(struct ast_context *con,
@@ -134,7 +134,7 @@
}
-void ast_cli_register_multiple(void)
+void __ast_cli_register_multiple(void)
{
if(!no_comp)
printf("Executed ast_cli_register_multiple();\n");
More information about the asterisk-commits
mailing list