diff options
-rw-r--r-- | apps/app_voicemail.c | 13 | ||||
-rw-r--r-- | res/res_smdi.c | 4 |
2 files changed, 17 insertions, 0 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index f3e423ec1..0509559bb 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -8862,7 +8862,10 @@ static int load_module(void) { int res; char *adsi_loaded = ast_module_helper("", "res_adsi.so", 0, 0, 0, 0); + char *smdi_loaded = ast_module_helper("", "res_smdi.so", 0, 0, 0, 0); free(adsi_loaded); + free(smdi_loaded); + if (!adsi_loaded) { /* If embedded, res_adsi may be known as "res_adsi" not "res_adsi.so" */ adsi_loaded = ast_module_helper("", "res_adsi", 0, 0, 0, 0); @@ -8873,6 +8876,16 @@ static int load_module(void) } } + if (!smdi_loaded) { + /* If embedded, res_smdi may be known as "res_smdi" not "res_smdi.so" */ + smdi_loaded = ast_module_helper("", "res_smdi", 0, 0, 0, 0); + ast_free(smdi_loaded); + if (!smdi_loaded) { + ast_log(LOG_ERROR, "app_voicemail.so depends upon res_smdi.so\n"); + return AST_MODULE_LOAD_DECLINE; + } + } + my_umask = umask(0); umask(my_umask); res = ast_register_application(app, vm_exec, synopsis_vm, descrip_vm); diff --git a/res/res_smdi.c b/res/res_smdi.c index e3da188c9..4c9427720 100644 --- a/res/res_smdi.c +++ b/res/res_smdi.c @@ -1337,6 +1337,8 @@ static struct ast_custom_function smdi_msg_function = { .read = smdi_msg_read, }; +static int unload_module(void); + static int load_module(void) { int res; @@ -1354,8 +1356,10 @@ static int load_module(void) /* load the config and start the listener threads*/ res = smdi_load(0); if (res < 0) { + unload_module(); return res; } else if (res == 1) { + unload_module(); ast_log(LOG_WARNING, "No SMDI interfaces are available to listen on, not starting SMDI listener.\n"); return AST_MODULE_LOAD_DECLINE; } |