***/
static const char config_file[] = "smdi.conf";
-static int smdi_loaded;
struct ast_smdi_interface {
char name[SMDI_MAX_FILENAME_LEN];
} else if (!strcasecmp(v->name, "twostopbits")) {
stopbits = ast_true(v->name);
} else if (!strcasecmp(v->name, "smdiport")) {
- if (reload) {
+ if (reload && old_ifaces) {
/* we are reloading, check if we are already
* monitoring this interface, if we are we do
* not want to start it again. This also has
.read = smdi_msg_read,
};
-static int _unload_module(int fromload);
+static int unload_module(void)
+{
+ ao2_global_obj_release(smdi_ifaces);
+
+ destroy_all_mailbox_mappings();
+
+ ast_mutex_lock(&mwi_monitor.lock);
+ mwi_monitor.stop = 1;
+ ast_cond_signal(&mwi_monitor.cond);
+ ast_mutex_unlock(&mwi_monitor.lock);
+
+ if (mwi_monitor.thread != AST_PTHREADT_NULL) {
+ pthread_join(mwi_monitor.thread, NULL);
+ }
+
+ ast_custom_function_unregister(&smdi_msg_retrieve_function);
+ ast_custom_function_unregister(&smdi_msg_function);
+
+ return 0;
+}
/*!
* \brief Load the module
static int load_module(void)
{
int res;
- smdi_loaded = 1;
ast_mutex_init(&mwi_monitor.lock);
ast_cond_init(&mwi_monitor.cond, NULL);
/* load the config and start the listener threads*/
res = smdi_load(0);
if (res < 0) {
- _unload_module(1);
+ unload_module();
return AST_MODULE_LOAD_DECLINE;
} else if (res == 1) {
- _unload_module(1);
ast_log(LOG_NOTICE, "No SMDI interfaces are available to listen on, not starting SMDI listener.\n");
- return AST_MODULE_LOAD_DECLINE;
}
ast_custom_function_register(&smdi_msg_retrieve_function);
return AST_MODULE_LOAD_SUCCESS;
}
-static int _unload_module(int fromload)
-{
- if (!smdi_loaded) {
- return 0;
- }
-
- ao2_global_obj_release(smdi_ifaces);
-
- destroy_all_mailbox_mappings();
-
- ast_mutex_lock(&mwi_monitor.lock);
- mwi_monitor.stop = 1;
- ast_cond_signal(&mwi_monitor.cond);
- ast_mutex_unlock(&mwi_monitor.lock);
-
- if (mwi_monitor.thread != AST_PTHREADT_NULL) {
- pthread_join(mwi_monitor.thread, NULL);
- }
-
- if (!fromload) {
- ast_custom_function_unregister(&smdi_msg_retrieve_function);
- ast_custom_function_unregister(&smdi_msg_function);
- }
-
- smdi_loaded = 0;
-
- return 0;
-}
-
-static int unload_module(void)
-{
- return _unload_module(0);
-}
-
static int reload(void)
{
int res;
res = smdi_load(1);
-
if (res < 0) {
return res;
} else if (res == 1) {
ast_log(LOG_WARNING, "No SMDI interfaces were specified to listen on, not starting SDMI listener.\n");
- return 0;
- } else
- return 0;
+ }
+ return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Simplified Message Desk Interface (SMDI) Resource",