diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index ec1d2189c37460c62b4954ed578603d33feeba66..10495acb6fd60e8b612feb5de0d945060c2f5b4a 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)",