Remove unnecessary channel module references.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 27 Nov 2012 20:39:51 +0000 (20:39 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 27 Nov 2012 20:39:51 +0000 (20:39 +0000)
* Removed call to ast_module_user_hangup_all() in res_config_mysql.c since
it is effectively a noop.  No channels can attach a reference to that
module.

* Removed call to ast_module_user_hangup_all() in app_celgenuserevent.c.
The caller of unload_module() has already called it.

* Removed redundant channel module references in pbx_dundi.c.  The
registered dialplan function callback dispatchers for the read/read2/write
callbacks already reference the module before calling.

* pbx_dundi: Moved unregistering CLI commands, DUNDi switch, and dialplan
functions to the first thing the unload_module() does.  This will reduce
the chance of new channels using DUNDi services while the module is being
torn down.
........

Merged revisions 376657 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 376658 from http://svn.asterisk.org/svn/asterisk/branches/10
........

Merged revisions 376659 from http://svn.asterisk.org/svn/asterisk/branches/11

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@376660 65c4cc65-6c06-0410-ace0-fbb531ad65f3

addons/res_config_mysql.c
apps/app_celgenuserevent.c
pbx/pbx_dundi.c

index 4984dbd..fe8b845 100644 (file)
@@ -1393,9 +1393,6 @@ static int unload_module(void)
        ast_config_engine_deregister(&mysql_engine);
        ast_verb(2, "MySQL RealTime unloaded.\n");
 
-       ast_module_user_hangup_all();
-
-       usleep(1);
        AST_RWLIST_WRLOCK(&databases);
        while ((cur = AST_RWLIST_REMOVE_HEAD(&databases, list))) {
                mysql_close(&cur->handle);
index 57dde86..f5714d0 100644 (file)
@@ -80,13 +80,8 @@ static int celgenuserevent_exec(struct ast_channel *chan, const char *data)
 
 static int unload_module(void)
 {
-       int res;
-
-       res = ast_unregister_application(app);
-
-       ast_module_user_hangup_all();
-
-       return res;
+       ast_unregister_application(app);
+       return 0;
 }
 
 static int load_module(void)
index 9311099..6e5dc16 100644 (file)
@@ -4078,7 +4078,6 @@ static int dundifunc_read(struct ast_channel *chan, const char *cmd, char *num,
 {
        int results;
        int x;
-       struct ast_module_user *u;
        struct dundi_result dr[MAX_RESULTS];
        AST_DECLARE_APP_ARGS(args,
                AST_APP_ARG(number);
@@ -4095,8 +4094,6 @@ static int dundifunc_read(struct ast_channel *chan, const char *cmd, char *num,
                return -1;
        }
 
-       u = ast_module_user_add(chan);
-
        parse = ast_strdupa(num);
 
        AST_STANDARD_APP_ARGS(args, parse);
@@ -4119,8 +4116,6 @@ static int dundifunc_read(struct ast_channel *chan, const char *cmd, char *num,
                }
        }
 
-       ast_module_user_remove(u);
-
        return 0;
 }
 
@@ -4159,7 +4154,6 @@ static const struct ast_datastore_info dundi_result_datastore_info = {
 
 static int dundi_query_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
 {
-       struct ast_module_user *u;
        AST_DECLARE_APP_ARGS(args,
                AST_APP_ARG(number);
                AST_APP_ARG(context);
@@ -4170,17 +4164,13 @@ static int dundi_query_read(struct ast_channel *chan, const char *cmd, char *dat
        struct dundi_result_datastore *drds;
        struct ast_datastore *datastore;
 
-       u = ast_module_user_add(chan);
-
        if (ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "DUNDIQUERY requires an argument (number)\n");
-               ast_module_user_remove(u);
                return -1;
        }
 
        if (!chan) {
                ast_log(LOG_ERROR, "DUNDIQUERY can not be used without a channel!\n");
-               ast_module_user_remove(u);
                return -1;
        }
 
@@ -4195,7 +4185,6 @@ static int dundi_query_read(struct ast_channel *chan, const char *cmd, char *dat
                args.context = "e164";
 
        if (!(drds = ast_calloc(1, sizeof(*drds)))) {
-               ast_module_user_remove(u);
                return -1;
        }
 
@@ -4204,7 +4193,6 @@ static int dundi_query_read(struct ast_channel *chan, const char *cmd, char *dat
 
        if (!(datastore = ast_datastore_alloc(&dundi_result_datastore_info, buf))) {
                drds_destroy(drds);
-               ast_module_user_remove(u);
                return -1;
        }
 
@@ -4220,8 +4208,6 @@ static int dundi_query_read(struct ast_channel *chan, const char *cmd, char *dat
        ast_channel_datastore_add(chan, datastore);
        ast_channel_unlock(chan);
 
-       ast_module_user_remove(u);
-
        return 0;
 }
 
@@ -4232,7 +4218,6 @@ static struct ast_custom_function dundi_query_function = {
 
 static int dundi_result_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
 {
-       struct ast_module_user *u;
        AST_DECLARE_APP_ARGS(args,
                AST_APP_ARG(id);
                AST_APP_ARG(resultnum);
@@ -4243,8 +4228,6 @@ static int dundi_result_read(struct ast_channel *chan, const char *cmd, char *da
        struct ast_datastore *datastore;
        int res = -1;
 
-       u = ast_module_user_add(chan);
-
        if (ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "DUNDIRESULT requires an argument (id and resultnum)\n");
                goto finish;
@@ -4299,8 +4282,6 @@ static int dundi_result_read(struct ast_channel *chan, const char *cmd, char *da
                ast_log(LOG_WARNING, "Result number %u is not valid for DUNDi query results for ID %s!\n", num, args.id);
 
 finish:
-       ast_module_user_remove(u);
-
        return res;
 }
 
@@ -4968,7 +4949,12 @@ static int set_config(char *config_file, struct sockaddr_in* sin, int reload)
 static int unload_module(void)
 {
        pthread_t previous_netthreadid = netthreadid, previous_precachethreadid = precachethreadid, previous_clearcachethreadid = clearcachethreadid;
-       ast_module_user_hangup_all();
+
+       ast_cli_unregister_multiple(cli_dundi, ARRAY_LEN(cli_dundi));
+       ast_unregister_switch(&dundi_switch);
+       ast_custom_function_unregister(&dundi_function);
+       ast_custom_function_unregister(&dundi_query_function);
+       ast_custom_function_unregister(&dundi_result_function);
 
        /* Stop all currently running threads */
        dundi_shutdown = 1;
@@ -4985,11 +4971,6 @@ static int unload_module(void)
                pthread_join(previous_clearcachethreadid, NULL);
        }
 
-       ast_cli_unregister_multiple(cli_dundi, ARRAY_LEN(cli_dundi));
-       ast_unregister_switch(&dundi_switch);
-       ast_custom_function_unregister(&dundi_function);
-       ast_custom_function_unregister(&dundi_query_function);
-       ast_custom_function_unregister(&dundi_result_function);
        close(netsocket);
        io_context_destroy(io);
        ast_sched_context_destroy(sched);