]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
pbx_dundi: Run cleanup on failed load. 70/1970/1
authorCorey Farrell <git@cfware.com>
Sun, 10 Jan 2016 00:04:34 +0000 (19:04 -0500)
committerCorey Farrell <git@cfware.com>
Sun, 10 Jan 2016 00:04:34 +0000 (19:04 -0500)
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

pbx/pbx_dundi.c

index f5bb9a0432c110965e4f843276da61b30ecabbf2..8c015cbaf77c510d31fd9d4b1e780ddc23e9a2a1 100644 (file)
@@ -5005,30 +5005,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));
@@ -5041,6 +5042,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)",