diff options
author | Corey Farrell <git@cfware.com> | 2016-01-09 19:04:34 -0500 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2016-01-09 18:07:08 -0600 |
commit | 79b430988102eefed7d2ddb3655361df129a6216 (patch) | |
tree | ac68b3ea0aa470b7c9b5ce1d726ce8de456c2c31 /pbx | |
parent | 573b37c6581b54cfe80dfd9a956c29c33f11f4bd (diff) |
pbx_dundi: Run cleanup on failed load.
During failed startup of pbx_dundi no cleanup was performed. Add a call
to unload_module before returning AST_MODULE_LOAD_DECLINE.
ASTERISK-25677 #close
Change-Id: I8ffa226fda4365ee7068ac1f464473f1a4ebbb29
Diffstat (limited to 'pbx')
-rw-r--r-- | pbx/pbx_dundi.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index 04da24788..51801f45f 100644 --- a/pbx/pbx_dundi.c +++ b/pbx/pbx_dundi.c @@ -5014,30 +5014,31 @@ static int load_module(void) io = io_context_create(); sched = ast_sched_context_create(); - if (!io || !sched) - return AST_MODULE_LOAD_DECLINE; + if (!io || !sched) { + goto declined; + } - if (set_config("dundi.conf", &sin, 0)) - return AST_MODULE_LOAD_DECLINE; + if (set_config("dundi.conf", &sin, 0)) { + goto declined; + } netsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (netsocket < 0) { ast_log(LOG_ERROR, "Unable to create network socket: %s\n", strerror(errno)); - return AST_MODULE_LOAD_DECLINE; + goto declined; } if (bind(netsocket, (struct sockaddr *) &sin, sizeof(sin))) { ast_log(LOG_ERROR, "Unable to bind to %s port %d: %s\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), strerror(errno)); - return AST_MODULE_LOAD_DECLINE; + goto declined; } ast_set_qos(netsocket, tos, 0, "DUNDi"); if (start_network_thread()) { ast_log(LOG_ERROR, "Unable to start network thread\n"); - close(netsocket); - return AST_MODULE_LOAD_DECLINE; + goto declined; } ast_cli_register_multiple(cli_dundi, ARRAY_LEN(cli_dundi)); @@ -5050,6 +5051,10 @@ static int load_module(void) ast_verb(2, "DUNDi Ready and Listening on %s port %d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); return AST_MODULE_LOAD_SUCCESS; + +declined: + unload_module(); + return AST_MODULE_LOAD_DECLINE; } AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Distributed Universal Number Discovery (DUNDi)", |